Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   Related Pages  

SNAC-SRV.h

00001 /*
00002  * SNAC - Server
00003  *
00004  * Copyright (C) 2001 Barnaby Gray <barnaby@beedesign.co.uk>
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
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   // Server Messages (Family 0x0015) - messages through the server
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    * SRV_Response is very generic - ICQ have hacked all the extra ICQ
00041    * functionality into this one
00042    */
00043 
00044   // --------------------- Server (Family 0x0015) SNACs ---------
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; // used to be SrvResponse_SMS
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     // SMS Response fields
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     // Offline Message fields
00272     time_t m_time;
00273     unsigned int m_sender_UIN;
00274     ICQSubType *m_icqsubtype;
00275 
00276     // SimpleUserInfo fields
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     // DetailedUserInfo fields
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     // detailed user info structures
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

Generated on Fri Apr 26 23:48:15 2002 for libicq2000 by doxygen1.2.15