h460p.h

Go to the documentation of this file.
00001 /*
00002  * h460p.h
00003  *
00004  * H460 Presence class.
00005  *
00006  * h323plus library
00007  *
00008  * Copyright (c) 2008 ISVO (Asia) Pte. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.1 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Alternatively, the contents of this file may be used under the terms
00016  * of the General Public License (the  "GNU License"), in which case the
00017  * provisions of GNU License are applicable instead of those
00018  * above. If you wish to allow use of your version of this file only
00019  * under the terms of the GNU License and not to allow others to use
00020  * your version of this file under the MPL, indicate your decision by
00021  * deleting the provisions above and replace them with the notice and
00022  * other provisions required by the GNU License. If you do not delete
00023  * the provisions above, a recipient may use your version of this file
00024  * under either the MPL or the GNU License."
00025  *
00026  * Software distributed under the License is distributed on an "AS IS"
00027  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00028  * the License for the specific language governing rights and limitations
00029  * under the License.
00030  *
00031  *
00032  * The Initial Developer of the Original Code is ISVO (Asia) Pte. Ltd.
00033  *
00034  * Contributor(s): Many thanks to Simon Horne.
00035  *
00036  * $Revision: 20352 $
00037  * $Author: rjongbloed $
00038  * $Date: 2008-06-01 07:30:08 +0000 (Sun, 01 Jun 2008) $
00039  */
00040 
00041 
00042 #pragma once
00043 
00044 #include <opal/buildopts.h>
00045 
00046 #ifdef OPAL_H460
00047 
00048 #include <h460/h460pres.h>
00049 
00050 // Derive you implementation from H323PresenceHandler.
00051 
00052 class H323PresenceSubscriptions;
00053 class H323PresenceNotifications;
00054 class H323PresenceIdentifiers;
00055 class H323PresenceInstructions;
00056 class H323PresenceHandler  : public PObject
00057 {
00058     PCLASSINFO(H323PresenceHandler, PObject);
00059 
00060 public:
00061         bool ReceivedPDU(const H225_EndpointIdentifier * id,const PASN_OctetString & pdu);
00062 
00063     enum MsgType {
00064       e_Status,
00065       e_Instruct,
00066       e_Authorize,
00067       e_Notify,
00068       e_Request,
00069       e_Response,
00070       e_Alive,
00071       e_Remove,
00072       e_Alert
00073     };
00074 
00075 // Callbacks
00076         virtual void OnNotification(MsgType /*tag*/,
00077                                                                 const H225_EndpointIdentifier * /*id*/, 
00078                                                                 const H460P_PresenceNotification & /*notify*/) {}
00079         virtual void OnSubscription(MsgType /*tag*/,
00080                                                                 const H225_EndpointIdentifier * /*id*/, 
00081                                                                 const H460P_PresenceSubscription & /*subscription*/) {}
00082         virtual void OnInstructions(MsgType /*tag*/,
00083                                                                 const H225_EndpointIdentifier * /*id*/, 
00084                                                                 const H460P_ArrayOf_PresenceInstruction & /*instruction*/) {}
00085         virtual void OnIdentifiers(MsgType /*tag*/,
00086                                                                 const H460P_ArrayOf_PresenceIdentifier & /*identifier*/) {}
00087 
00088 // Build Messages
00089      H460P_PresenceStatus & BuildStatus(H460P_PresenceMessage & msg, 
00090                                                                         const H323PresenceNotifications & notify,
00091                                                                         const H323PresenceInstructions & inst);
00092      H460P_PresenceInstruct & BuildInstruct(H460P_PresenceMessage & msg, 
00093                                                                         const H323PresenceInstructions & inst);
00094      H460P_PresenceAuthorize & BuildAuthorize(H460P_PresenceMessage & msg, 
00095                                                                         const H323PresenceSubscriptions & subs);
00096      H460P_PresenceNotify & BuildNotify(H460P_PresenceMessage & msg, 
00097                                                                         const H323PresenceNotifications & notify);
00098      H460P_PresenceRequest & BuildRequest(H460P_PresenceMessage & msg, 
00099                                                                         const H323PresenceSubscriptions & subs);
00100      H460P_PresenceResponse & BuildResponse(H460P_PresenceMessage & msg, 
00101                                                                         const H323PresenceSubscriptions & subs);
00102      H460P_PresenceAlive & BuildAlive(H460P_PresenceMessage & msg, 
00103                                                                         const H323PresenceIdentifiers & id);
00104      H460P_PresenceRemove & BuildRemove(H460P_PresenceMessage & msg, 
00105                                                                         const H323PresenceIdentifiers & id);
00106      H460P_PresenceAlert & BuildAlert(H460P_PresenceMessage & msg, 
00107                                                                         const H323PresenceNotifications & notify);
00108 };
00109 
00110 
00111 class H323PresenceNotification : public H460P_PresenceNotification
00112 {
00113 
00114 public:
00115 
00116         enum States {
00117       e_hidden,
00118       e_available,
00119       e_online,
00120       e_offline,
00121       e_onCall,
00122       e_voiceMail,
00123       e_notAvailable,
00124           e_generic
00125         };
00126 
00127         static PString GetStateString(unsigned state);
00128 
00129     void SetPresenceState(States state, const PString & display = PString());
00130     void SetGenericState(const PString & state);
00131         void GetPresenceState(States & state, PString & display);
00132 
00133         void AddSubscriber(const OpalGloballyUniqueID & guid);
00134         OpalGloballyUniqueID GetSubscriber(PINDEX i);
00135         void RemoveSubscribers();
00136     void AddAlias(const PString & alias);
00137         PString GetAlias();
00138 
00139 
00140 };
00141 
00142 class H323PresenceNotifications : public H460P_ArrayOf_PresenceNotification  
00143 {
00144 
00145   public:
00146      void Add(const H323PresenceNotification & notify);
00147 };
00148 
00149 class H323PresenceSubscription : public H460P_PresenceSubscription
00150 {
00151 
00152 public:
00153         H323PresenceSubscription();
00154 
00155  // Sending Gatekeeper
00156         void SetSubscriptionDetails(const PString & subscribe, const PStringList & aliases);
00157         void GetSubscriberDetails(PStringList & aliases);
00158         PString GetSubscribed();
00159 
00160         void SetGatekeeperRAS(const H323TransportAddress & address);
00161         H323TransportAddress GetGatekeeperRAS();
00162 
00163  // Receiving Gatekeeper/Endpoint
00164         void MakeDecision(bool approve);
00165         bool IsDecisionMade();
00166         int IsApproved(); // -1 not decided; 0 - not approved; 1 - approved;
00167         void SetTimeToLive(int t);
00168         int GetTimeToLive();
00169 
00170         void SetSubscription(const OpalGloballyUniqueID & guid);
00171     OpalGloballyUniqueID GetSubscription();
00172 
00173 protected:
00174         void SetApproved(bool success);
00175     
00176 };
00177 
00178 class H323PresenceSubscriptions : public H460P_ArrayOf_PresenceSubscription 
00179 {
00180    public:
00181            void Add(const H323PresenceSubscription & sub);
00182 };
00183 
00184 class H323PresenceInstruction  :  public H460P_PresenceInstruction
00185 {
00186 
00187  public:
00188         enum Instruction {
00189           e_subscribe,
00190       e_unsubscribe,
00191       e_block,
00192       e_unblock
00193         };
00194 
00195         static PString GetInstructionString(unsigned instruct);
00196  
00197     H323PresenceInstruction(Instruction instruct, const PString & alias);
00198         Instruction GetInstruction();
00199         PString GetAlias();
00200 };
00201 
00202 class H323PresenceInstructions  : public H460P_ArrayOf_PresenceInstruction
00203 {
00204   public:
00205         void Add(const H323PresenceInstruction & instruct);
00206         H323PresenceInstruction & operator[](PINDEX i) const;
00207 };
00208 
00209 class H323PresenceIdentifiers   : public H460P_ArrayOf_PresenceIdentifier
00210 {
00211 
00212   public:
00213         void Add(const OpalGloballyUniqueID & guid);
00214         OpalGloballyUniqueID GetIdentifier(PINDEX i);
00215 };
00216 
00217 #endif
00218 
00219 

Generated on Mon Sep 15 11:49:09 2008 for OPAL by  doxygen 1.5.1