00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SNAC_SRV_H
00023 #define SNAC_SRV_H
00024
00025 #include <string>
00026 #include <time.h>
00027 #include <libicq2000/SNAC-base.h>
00028 #include <libicq2000/ICQ.h>
00029 #include <libicq2000/constants.h>
00030 #include <libicq2000/Contact.h>
00031
00032 namespace ICQ2000 {
00033
00034
00035 const unsigned short SNAC_SRV_Error = 0x0001;
00036 const unsigned short SNAC_SRV_Send = 0x0002;
00037 const unsigned short SNAC_SRV_Response = 0x0003;
00038
00039
00040
00041
00042
00043
00044
00045
00046 class SrvFamilySNAC : virtual public SNAC {
00047 public:
00048 unsigned short Family() const { return SNAC_FAM_SRV; }
00049 };
00050
00051 class SrvSendSNAC : public SrvFamilySNAC, public OutSNAC {
00052 protected:
00053 string m_text, m_destination, m_senders_name;
00054 unsigned int m_senders_UIN;
00055 bool m_delivery_receipt;
00056
00057 void OutputBody(Buffer& b) const;
00058
00059 public:
00060 SrvSendSNAC(const string& text, const string& destination,
00061 unsigned int senders_UIN, const string& senders_name, bool delrpt);
00062
00063 unsigned short Subtype() const { return SNAC_SRV_Send; }
00064 };
00065
00066 class SrvRequestOfflineSNAC : public SrvFamilySNAC, public OutSNAC {
00067 private:
00068 unsigned int m_uin;
00069
00070 protected:
00071 void OutputBody(Buffer& b) const;
00072
00073 public:
00074 SrvRequestOfflineSNAC(unsigned int uin);
00075
00076 unsigned short Subtype() const { return SNAC_SRV_Send; }
00077 };
00078
00079 class SrvAckOfflineSNAC : public SrvFamilySNAC, public OutSNAC {
00080 private:
00081 unsigned int m_uin;
00082
00083 protected:
00084 void OutputBody(Buffer& b) const;
00085
00086 public:
00087 SrvAckOfflineSNAC(unsigned int uin);
00088
00089 unsigned short Subtype() const { return SNAC_SRV_Send; }
00090 };
00091
00092 class SrvRequestSimpleUserInfo : public SrvFamilySNAC, public OutSNAC {
00093 private:
00094 unsigned int m_my_uin, m_user_uin;
00095
00096 protected:
00097 void OutputBody(Buffer& b) const;
00098
00099 public:
00100 SrvRequestSimpleUserInfo(unsigned int my_uin, unsigned int user_uin);
00101 unsigned short Subtype() const { return SNAC_SRV_Send; }
00102 };
00103
00104 class SrvRequestShortWP : public SrvFamilySNAC, public OutSNAC {
00105 protected:
00106 unsigned int m_my_uin;
00107 string m_nickname, m_firstname, m_lastname;
00108 void OutputBody(Buffer& b) const;
00109
00110 public:
00111 SrvRequestShortWP(unsigned int my_uin, const string& nickname,
00112 const string& firstname, const string& lastname);
00113
00114 unsigned short Subtype() const { return SNAC_SRV_Send; }
00115 };
00116
00117 class SrvRequestFullWP : public SrvFamilySNAC, public OutSNAC {
00118 private:
00119 unsigned int m_my_uin;
00120 string m_nickname, m_firstname, m_lastname, m_email;
00121 unsigned short m_min_age, m_max_age;
00122 unsigned char m_sex;
00123 unsigned char m_language;
00124 string m_city, m_state, m_company_name, m_department, m_position;
00125 unsigned short m_country;
00126 bool m_only_online;
00127
00128 protected:
00129 void OutputBody(Buffer& b) const;
00130
00131 public:
00132 SrvRequestFullWP(unsigned int my_uin, const string& nickname, const string& firstname,
00133 const string& lastname, const string& email, unsigned short min_age, unsigned short max_age,
00134 unsigned char sex, unsigned char language, const string& city, const string& state,
00135 unsigned short country, const string& company_name, const string& department,
00136 const string& position, bool only_online);
00137
00138 unsigned short Subtype() const { return SNAC_SRV_Send; }
00139 };
00140
00141 class SrvRequestKeywordSearch : public SrvFamilySNAC, public OutSNAC
00142 {
00143 private:
00144 unsigned int m_my_uin;
00145 std::string m_keyword;
00146
00147 protected:
00148 void OutputBody(Buffer& b) const;
00149
00150 public:
00151 SrvRequestKeywordSearch(unsigned int my_uin, const std::string& keyword);
00152 unsigned short Subtype() const { return SNAC_SRV_Send; }
00153 };
00154
00155 class SrvRequestDetailUserInfo : public SrvFamilySNAC, public OutSNAC {
00156 private:
00157 unsigned int m_my_uin, m_user_uin;
00158
00159 protected:
00160 void OutputBody(Buffer& b) const;
00161
00162 public:
00163 SrvRequestDetailUserInfo(unsigned int my_uin, unsigned int user_uin);
00164 unsigned short Subtype() const { return SNAC_SRV_Send; }
00165 };
00166
00167 class SrvUpdateMainHomeInfo : public SrvFamilySNAC, public OutSNAC {
00168 private:
00169 unsigned int m_my_uin;
00170 const Contact::MainHomeInfo& m_main_home_info;
00171
00172 protected:
00173 void OutputBody(Buffer& b) const;
00174
00175 public:
00176 SrvUpdateMainHomeInfo(unsigned int my_uin, const Contact::MainHomeInfo& main_home_info);
00177 unsigned short Subtype() const { return SNAC_SRV_Send; }
00178 };
00179
00180 class SrvUpdateWorkInfo : public SrvFamilySNAC, public OutSNAC {
00181 private:
00182 unsigned int m_my_uin;
00183 const Contact::WorkInfo& m_work_info;
00184
00185 protected:
00186 void OutputBody(Buffer& b) const;
00187
00188 public:
00189 SrvUpdateWorkInfo(unsigned int my_uin, const Contact::WorkInfo& work_info);
00190 unsigned short Subtype() const { return SNAC_SRV_Send; }
00191 };
00192
00193 class SrvUpdateHomepageInfo : public SrvFamilySNAC, public OutSNAC {
00194 private:
00195 unsigned int m_my_uin;
00196 const Contact::HomepageInfo& m_homepage_info;
00197
00198 protected:
00199 void OutputBody(Buffer& b) const;
00200
00201 public:
00202 SrvUpdateHomepageInfo(unsigned int my_uin, const Contact::HomepageInfo& homepage_info);
00203 unsigned short Subtype() const { return SNAC_SRV_Send; }
00204 };
00205
00206 class SrvUpdateAboutInfo : public SrvFamilySNAC, public OutSNAC {
00207 private:
00208 unsigned int m_my_uin;
00209 const string& m_about_info;
00210
00211 protected:
00212 void OutputBody(Buffer& b) const;
00213
00214 public:
00215 SrvUpdateAboutInfo(unsigned int my_uin, const string& about_info);
00216 unsigned short Subtype() const { return SNAC_SRV_Send; }
00217 };
00218
00219 const unsigned short SrvResponse_Error = 0x0001;
00220 const unsigned short SrvResponse_AckMainHomeInfoChange = 0x0064;
00221 const unsigned short SrvResponse_AckWorkInfoChange = 0x006E;
00222 const unsigned short SrvResponse_AckHomepageInfoChange = 0x0078;
00223 const unsigned short SrvResponse_AckAboutInfoChange = 0x0082;
00224 const unsigned short SrvResponse_SMS_Done = 0x0096;
00225 const unsigned short SrvResponse_SimpleUI = 0x0190;
00226 const unsigned short SrvResponse_SimpleUI_Done = 0x019a;
00227 const unsigned short SrvResponse_SearchUI = 0x01a4;
00228 const unsigned short SrvResponse_SearchUI_Done = 0x01ae;
00229 const unsigned short SrvResponse_MainHomeInfo = 0x00c8;
00230 const unsigned short SrvResponse_WorkInfo = 0x00d2;
00231 const unsigned short SrvResponse_HomePageInfo = 0x00dc;
00232 const unsigned short SrvResponse_AboutInfo = 0x00e6;
00233 const unsigned short SrvResponse_EmailInfo = 0x00eb;
00234 const unsigned short SrvResponse_InterestInfo = 0x00f0;
00235 const unsigned short SrvResponse_BackgroundInfo = 0x00fa;
00236 const unsigned short SrvResponse_Unknown = 0x010e;
00237
00238 class SrvResponseSNAC : public SrvFamilySNAC, public InSNAC {
00239 public:
00240 enum ResponseType {
00241 OfflineMessage,
00242 OfflineMessagesComplete,
00243 SMS_Error,
00244 SMS_Response,
00245 SimpleUserInfo,
00246 SearchSimpleUserInfo,
00247 RMainHomeInfo,
00248 RHomepageInfo,
00249 REmailInfo,
00250 RUnknown,
00251 RWorkInfo,
00252 RAboutInfo,
00253 RInterestInfo,
00254 RBackgroundInfo,
00255 AckMainHomeInfoChange,
00256 AckHomepageInfoChange,
00257 AckWorkInfoChange,
00258 AckAboutInfoChange
00259 };
00260
00261 protected:
00262 ResponseType m_type;
00263
00264
00265 string m_source, m_network, m_message_id, m_messages_left;
00266 bool m_deliverable, m_smtp_deliverable;
00267 int m_error_id;
00268 string m_error_param;
00269 string m_smtp_from, m_smtp_to, m_smtp_subject;
00270
00271
00272 time_t m_time;
00273 unsigned int m_sender_UIN;
00274 ICQSubType *m_icqsubtype;
00275
00276
00277 bool m_empty_contact;
00278 unsigned int m_uin;
00279 string m_alias, m_firstname, m_lastname, m_email;
00280 bool m_last_in_search;
00281
00282
00283 Contact::MainHomeInfo m_main_home_info;
00284 Contact::HomepageInfo m_homepage_info;
00285 Contact::EmailInfo m_email_info;
00286 Contact::WorkInfo m_work_info;
00287 Contact::BackgroundInfo m_background_info;
00288 Contact::PersonalInterestInfo m_personal_interest_info;
00289 std::string m_about;
00290 unsigned char m_sex, m_age;
00291
00292 bool m_authreq;
00293 Status m_status;
00294 unsigned int m_more_results;
00295
00296 void ParseBody(Buffer& b);
00297 void ParseICQResponse(Buffer& b);
00298 void ParseOfflineMessage(Buffer& b);
00299 void ParseInfoChangeAck(Buffer &b, unsigned short subtype);
00300 void ParseSMSError(Buffer& b);
00301 void ParseSMSResponse(Buffer& b);
00302 void ParseSimpleUserInfo(Buffer &b, unsigned short subtype);
00303 void ParseDetailedUserInfo(Buffer &b, unsigned short subtype);
00304
00305 public:
00306 SrvResponseSNAC();
00307 ~SrvResponseSNAC();
00308
00309 ResponseType getType() const { return m_type; }
00310 string getSource() const { return m_source; }
00311 bool deliverable() const { return m_deliverable; }
00312 bool smtp_deliverable() const { return m_smtp_deliverable; }
00313
00314 string getSMTPFrom() const { return m_smtp_from; }
00315 string getSMTPTo() const { return m_smtp_to; }
00316 string getSMTPSubject() const { return m_smtp_subject; }
00317
00318 string getNetwork() const { return m_network; }
00319 string getMessageId() const { return m_message_id; }
00320 string getMessagesLeft() const { return m_messages_left; }
00321 int getErrorId() const { return m_error_id; }
00322 string getErrorParam() const { return m_error_param; }
00323
00324 ICQSubType *getICQSubType() const { return m_icqsubtype; }
00325 unsigned int getSenderUIN() const { return m_sender_UIN; }
00326 time_t getTime() const { return m_time; }
00327
00328 bool isEmptyContact() const { return m_empty_contact; }
00329 unsigned int getUIN() const { return m_uin; }
00330 string getAlias() const { return m_alias; }
00331 string getFirstName() const { return m_firstname; }
00332 string getLastName() const { return m_lastname; }
00333 string getEmail() const { return m_email; }
00334 bool getAuthReq() const { return m_authreq; }
00335 Status getStatus() const { return m_status; }
00336
00337 bool isLastInSearch() const { return m_last_in_search; }
00338 unsigned int getNumberMoreResults() const { return m_more_results; }
00339
00340
00341 unsigned short Subtype() const { return SNAC_SRV_Response; }
00342
00343
00344 Contact::MainHomeInfo& getMainHomeInfo() { return m_main_home_info; }
00345 Contact::HomepageInfo& getHomepageInfo() { return m_homepage_info; }
00346 Contact::EmailInfo& getEmailInfo() { return m_email_info; }
00347 Contact::WorkInfo& getWorkInfo() { return m_work_info; }
00348 Contact::BackgroundInfo& getBackgroundInfo() { return m_background_info; }
00349 Contact::PersonalInterestInfo& getPersonalInterestInfo() { return m_personal_interest_info; }
00350 string getAboutInfo() const { return m_about; }
00351 };
00352
00353 }
00354
00355 #endif