Ignore:
Timestamp:
Jul 18, 2008 11:00:56 PM (16 years ago)
Author:
bennylp
Message:

Implemented ticket #192 for Python: Add callback to notify application about incoming SUBSCRIBE request, and add subscription state and termination reason in buddy info

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/python/pjsua.py

    r2122 r2156  
    148148    Member documentation: 
    149149 
    150     NONE        -- media is not available. 
     150    NULL        -- media is not available. 
    151151    ACTIVE      -- media is active. 
    152152    LOCAL_HOLD  -- media is put on-hold by local party. 
     
    154154    ERROR       -- media error (e.g. ICE negotiation failure). 
    155155    """ 
    156     NONE = 0 
     156    NULL = 0 
    157157    ACTIVE = 1 
    158158    LOCAL_HOLD = 2 
     
    166166    Member documentation: 
    167167 
    168     NONE              -- media is not active 
     168    NULL              -- media is not active 
    169169    ENCODING          -- media is active in transmit/encoding direction only. 
    170170    DECODING          -- media is active in receive/decoding direction only 
    171171    ENCODING_DECODING -- media is active in both directions. 
    172172    """ 
    173     NONE = 0 
     173    NULL = 0 
    174174    ENCODING = 1 
    175175    DECODING = 2 
     
    189189    AWAY = 1 
    190190    BUSY = 2 
     191 
     192 
     193class SubscriptionState: 
     194    """Presence subscription state constants. 
     195 
     196    """ 
     197    NULL = 0 
     198    SENT = 1 
     199    ACCEPTED = 2 
     200    PENDING = 3 
     201    ACTIVE = 4 
     202    TERMINATED = 5 
     203    UNKNOWN = 6 
     204 
    191205 
    192206class TURNConnType: 
     
    862876        reject the call with default status code. 
    863877 
    864     Keyword arguments: 
    865     call    -- the new incoming call 
     878        Keyword arguments: 
     879        call    -- the new incoming call 
    866880        """ 
    867881        call.hangup() 
     882 
     883    def on_incoming_subscribe(self, buddy, from_uri, pres_obj): 
     884        """Notification when incoming SUBSCRIBE request is received.  
     885         
     886        Application may use this callback to authorize the incoming  
     887        subscribe request (e.g. ask user permission if the request  
     888        should be granted) 
     889 
     890        Keyword arguments: 
     891        buddy       -- The buddy object, if buddy is found. Otherwise 
     892                       the value is None. 
     893        from_uri    -- The URI string of the sender. 
     894        pres_obj    -- Opaque presence subscription object, which is 
     895                       needed by Account.pres_notify() 
     896 
     897        Return: 
     898            Tuple (code, reason), where: 
     899             code:      The status code. If code is >= 300, the 
     900                        request is rejected. If code is 200, the 
     901                        request is accepted and NOTIFY will be sent 
     902                        automatically. If code is 202, application 
     903                        must accept or reject the request later with 
     904                        Account.press_notify(). 
     905             reason:    Optional reason phrase, or None to use the 
     906                        default reasoh phrase for the status code. 
     907        """ 
     908        return (200, None) 
    868909 
    869910    def on_pager(self, from_uri, contact, mime_type, body): 
     
    952993        id  -- the pjsua account ID. 
    953994        """ 
    954         _cb = AccountCallback(self) 
     995        self._cb = AccountCallback(self) 
    955996        self._id = id 
    956997        self._lib = lib 
     
    11021143        return Buddy(self._lib, buddy_id, self) 
    11031144 
     1145    def pres_notify(self, pres_obj, state, reason="", hdr_list=None): 
     1146        """Send NOTIFY to inform account presence status or to terminate 
     1147        server side presence subscription. 
     1148         
     1149        Keyword arguments: 
     1150        pres_obj    -- The subscription object from on_incoming_subscribe() 
     1151                       callback 
     1152        state       -- Subscription state, from SubscriptionState 
     1153        reason      -- Optional reason phrase. 
     1154        hdr_list    -- Optional header list. 
     1155        """ 
     1156        _pjsua.acc_pres_notify(self._id, pres_obj, state, reason,  
     1157                               Lib._create_msg_data(hdr_list)) 
    11041158 
    11051159class CallCallback: 
     
    12761330    last_code = 0 
    12771331    last_reason = "" 
    1278     media_state = MediaState.NONE 
    1279     media_dir = MediaDir.NONE 
     1332    media_state = MediaState.NULL 
     1333    media_dir = MediaDir.NULL 
    12801334    conf_slot = -1 
    12811335    call_time = 0 
     
    15301584    subscribed      -- specify whether buddy's presence status is currently 
    15311585                       being subscribed. 
     1586    sub_state       -- SubscriptionState 
     1587    sub_term_reason -- The termination reason string of the last presence 
     1588                       subscription to this buddy, if any. 
    15321589    """ 
    15331590    uri = "" 
     
    15371594    activity = PresenceActivity.UNKNOWN 
    15381595    subscribed = False 
     1596    sub_state = SubscriptionState.NULL 
     1597    sub_term_reason = "" 
    15391598 
    15401599    def __init__(self, pjsua_bi=None): 
     
    15491608        self.activity = inf.activity 
    15501609        self.subscribed = inf.monitor_pres 
     1610        self.sub_state = inf.sub_state 
     1611        self.sub_term_reason = inf.sub_term_reason 
    15511612 
    15521613 
     
    18671928        py_ua_cfg.cb.on_call_replaced = _cb_on_call_replaced 
    18681929        py_ua_cfg.cb.on_reg_state = _cb_on_reg_state 
     1930        py_ua_cfg.cb.on_incoming_subscribe = _cb_on_incoming_subscribe 
    18691931        py_ua_cfg.cb.on_buddy_state = _cb_on_buddy_state 
    18701932        py_ua_cfg.cb.on_pager = _cb_on_pager 
     
    22672329 
    22682330    def _lookup_buddy(self, buddy_id, uri=None): 
    2269         print "lookup_buddy, id=", buddy_id 
    22702331        buddy = self.buddy.has_key(buddy_id) and self.buddy[buddy_id] or None 
    22712332        if uri and not buddy: 
    22722333            sip_uri = SIPUri(uri) 
    2273             print "lookup_buddy, uri=", sip_uri.user, sip_uri.host 
    22742334            buddy = self.buddy_by_uri.has_key( (sip_uri.user, sip_uri.host) ) \ 
    22752335                    and self.buddy_by_uri[(sip_uri.user, sip_uri.host)] or \ 
     
    22892349        if acc: 
    22902350            acc._cb.on_reg_state() 
     2351 
     2352    def _cb_on_incoming_subscribe(self, acc_id, buddy_id, from_uri, pres_obj): 
     2353        acc = self._lookup_account(acc_id) 
     2354        if acc: 
     2355            buddy = self._lookup_buddy(buddy_id) 
     2356            return acc._cb.on_incoming_subscribe(buddy, from_uri, pres_obj) 
     2357        else: 
     2358            return (404, None) 
    22912359 
    22922360    def _cb_on_incoming_call(self, acc_id, call_id, rdata): 
     
    24252493    _lib._cb_on_reg_state(acc_id) 
    24262494 
     2495def _cb_on_incoming_subscribe(acc_id, buddy_id, from_uri, pres): 
     2496    return _lib._cb_on_incoming_subscribe(acc_id, buddy_id, from_uri, pres) 
     2497 
    24272498def _cb_on_buddy_state(buddy_id): 
    24282499    _lib._cb_on_buddy_state(buddy_id) 
Note: See TracChangeset for help on using the changeset viewer.