Changeset 8493 for branches/jingle

Show
Ignore:
Timestamp:
08/12/07 23:22:25 (16 months ago)
Author:
liori
Message:

Jingle: farsight bindings define constants now

Location:
branches/jingle/src/common
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branches/jingle/src/common/farsight/farsightmodule.c

    r8473 r8493  
    11#include <pygobject.h> 
    22#include <stdio.h> 
     3 
     4#include <farsight/farsight-codec.h> 
     5#include <farsight/farsight-stream.h> 
     6#include <farsight/farsight-transmitter.h> 
    37  
    48void farsight_register_classes (PyObject *d);  
     
    1721        farsight_register_classes (d); 
    1822  
    19         // farsight_add_constants(m, 'FARSIGHT_TYPE_'); 
     23        PyModule_AddIntConstant(m, "MEDIA_TYPE_AUDIO", FARSIGHT_MEDIA_TYPE_AUDIO); 
     24        PyModule_AddIntConstant(m, "MEDIA_TYPE_VIDEO", FARSIGHT_MEDIA_TYPE_VIDEO); 
     25        PyModule_AddIntConstant(m, "STREAM_DIRECTION_NONE", FARSIGHT_STREAM_DIRECTION_NONE); 
     26        PyModule_AddIntConstant(m, "STREAM_DIRECTION_SENDONLY", FARSIGHT_STREAM_DIRECTION_SENDONLY); 
     27        PyModule_AddIntConstant(m, "STREAM_DIRECTION_RECEIVEONLY", FARSIGHT_STREAM_DIRECTION_RECEIVEONLY); 
     28        PyModule_AddIntConstant(m, "STREAM_DIRECTION_BOTH", FARSIGHT_STREAM_DIRECTION_BOTH); 
     29        PyModule_AddIntConstant(m, "STREAM_STATE_DISCONNECTED", FARSIGHT_STREAM_STATE_DISCONNECTED); 
     30        PyModule_AddIntConstant(m, "STREAM_STATE_CONNECTING", FARSIGHT_STREAM_STATE_CONNECTING); 
     31        PyModule_AddIntConstant(m, "STREAM_STATE_CONNECTED", FARSIGHT_STREAM_STATE_CONNECTED); 
     32        PyModule_AddIntConstant(m, "STREAM_ERROR_EOS", FARSIGHT_STREAM_ERROR_EOS); 
     33        PyModule_AddIntConstant(m, "STREAM_UNKNOWN_ERROR", FARSIGHT_STREAM_UNKNOWN_ERROR); 
     34        PyModule_AddIntConstant(m, "STREAM_ERROR_UNKNOWN", FARSIGHT_STREAM_UNKNOWN_ERROR); 
     35        PyModule_AddIntConstant(m, "STREAM_ERROR_TIMEOUT", FARSIGHT_STREAM_ERROR_TIMEOUT); 
     36        PyModule_AddIntConstant(m, "STREAM_ERROR_NETWORK", FARSIGHT_STREAM_ERROR_NETWORK); 
     37        PyModule_AddIntConstant(m, "STREAM_ERROR_PIPELINE_SETUP", FARSIGHT_STREAM_ERROR_PIPELINE_SETUP); 
     38        PyModule_AddIntConstant(m, "STREAM_ERROR_RESOURCE", FARSIGHT_STREAM_ERROR_RESOURCE); 
     39        PyModule_AddIntConstant(m, "DTMF_EVENT_0", FARSIGHT_DTMF_EVENT_0); 
     40        PyModule_AddIntConstant(m, "DTMF_EVENT_1", FARSIGHT_DTMF_EVENT_1); 
     41        PyModule_AddIntConstant(m, "DTMF_EVENT_2", FARSIGHT_DTMF_EVENT_2); 
     42        PyModule_AddIntConstant(m, "DTMF_EVENT_3", FARSIGHT_DTMF_EVENT_3); 
     43        PyModule_AddIntConstant(m, "DTMF_EVENT_4", FARSIGHT_DTMF_EVENT_4); 
     44        PyModule_AddIntConstant(m, "DTMF_EVENT_5", FARSIGHT_DTMF_EVENT_5); 
     45        PyModule_AddIntConstant(m, "DTMF_EVENT_6", FARSIGHT_DTMF_EVENT_6); 
     46        PyModule_AddIntConstant(m, "DTMF_EVENT_7", FARSIGHT_DTMF_EVENT_7); 
     47        PyModule_AddIntConstant(m, "DTMF_EVENT_8", FARSIGHT_DTMF_EVENT_8); 
     48        PyModule_AddIntConstant(m, "DTMF_EVENT_9", FARSIGHT_DTMF_EVENT_9); 
     49        PyModule_AddIntConstant(m, "DTMF_EVENT_STAR", FARSIGHT_DTMF_EVENT_STAR); 
     50        PyModule_AddIntConstant(m, "DTMF_EVENT_POUND", FARSIGHT_DTMF_EVENT_POUND); 
     51        PyModule_AddIntConstant(m, "DTMF_EVENT_A", FARSIGHT_DTMF_EVENT_A); 
     52        PyModule_AddIntConstant(m, "DTMF_EVENT_B", FARSIGHT_DTMF_EVENT_B); 
     53        PyModule_AddIntConstant(m, "DTMF_EVENT_C", FARSIGHT_DTMF_EVENT_C); 
     54        PyModule_AddIntConstant(m, "DTMF_EVENT_D", FARSIGHT_DTMF_EVENT_D); 
     55        PyModule_AddIntConstant(m, "DTMF_METHOD_AUTO", FARSIGHT_DTMF_METHOD_AUTO); 
     56        PyModule_AddIntConstant(m, "DTMF_METHOD_RTP_RFC4733", FARSIGHT_DTMF_METHOD_RTP_RFC4733); 
     57        PyModule_AddIntConstant(m, "DTMF_METHOD_SOUND", FARSIGHT_DTMF_METHOD_SOUND); 
     58        PyModule_AddIntConstant(m, "TRANSMITTER_STATE_DISCONNECTED", FARSIGHT_TRANSMITTER_STATE_DISCONNECTED); 
     59        PyModule_AddIntConstant(m, "TRANSMITTER_STATE_CONNECTING", FARSIGHT_TRANSMITTER_STATE_CONNECTING); 
     60        PyModule_AddIntConstant(m, "TRANSMITTER_STATE_CONNECTED", FARSIGHT_TRANSMITTER_STATE_CONNECTED); 
     61        PyModule_AddIntConstant(m, "CANDIDATE_TYPE_LOCAL", FARSIGHT_CANDIDATE_TYPE_LOCAL); 
     62        PyModule_AddIntConstant(m, "CANDIDATE_TYPE_DERIVED", FARSIGHT_CANDIDATE_TYPE_DERIVED); 
     63        PyModule_AddIntConstant(m, "CANDIDATE_TYPE_RELAY", FARSIGHT_CANDIDATE_TYPE_RELAY); 
     64        PyModule_AddIntConstant(m, "NETWORK_PROTOCOL_UDP", FARSIGHT_NETWORK_PROTOCOL_UDP); 
     65        PyModule_AddIntConstant(m, "NETWORK_PROTOCOL_TCP", FARSIGHT_NETWORK_PROTOCOL_TCP); 
    2066 
    2167        if (PyErr_Occurred ()) { 
  • branches/jingle/src/common/farsight/farsight.override

    r8490 r8493  
    105105        fti->type               = get_long_from_dict(dict, "type"); 
    106106 
    107         if (PyError_Occurred()) return; 
     107        if (PyErr_Occurred()) return; 
    108108 
    109109        /* optional */ 
     
    111111        fti->password           = get_str_from_dict(dict, "password"); 
    112112 
    113         PyError_Clear(); 
     113        PyErr_Clear(); 
    114114} 
    115115 
     
    125125        fc->encoding_name       = get_str_from_dict(dict, "encoding_name"); 
    126126 
    127         if (PyError_Occured()) return; 
     127        if (PyErr_Occurred()) return; 
    128128 
    129129        /* optional data */ 
     
    336336        } 
    337337 
    338         if(!PyError_Occurred()) { 
     338        if(!PyErr_Occurred()) { 
    339339                farsight_stream_set_remote_candidate_list(FARSIGHT_STREAM(self->obj), candidate_list); 
    340340        } 
     
    343343        g_list_free(candidate_list); 
    344344 
    345         if(!PyError_Occurred()) { 
     345        if(!PyErr_Occurred()) { 
    346346                Py_INCREF(Py_None); 
    347347                return Py_None; 
     
    380380        } 
    381381 
    382         if (!PyError_Occurred()) { 
     382        if (!PyErr_Occurred()) { 
    383383                farsight_stream_set_remote_codecs(FARSIGHT_STREAM(self->obj), codecs_list); 
    384384        } 
     
    388388        g_list_free(codecs_list); 
    389389 
    390         if (!PyError_Occurred()) { 
     390        if (!PyErr_Occurred()) { 
    391391                Py_INCREF(Py_None); 
    392392                return Py_None; 
  • branches/jingle/src/common/jingle.py

    r8490 r8493  
    2121import farsight 
    2222sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_LOCAL) 
    23 FARSIGHT_MEDIA_TYPE_AUDIO=0 
    24 FARSIGHT_STREAM_DIRECTION_BOTH=3 
    25 FARSIGHT_NETWORK_PROTOCOL_UDP=0 
    26 FARSIGHT_CANDIDATE_TYPE_LOCAL=0 
    2723 
    2824import meta 
     
    8581        ''' Middle-level functions to manage contents. Handle local content 
    8682        cache and send change notifications. ''' 
    87         def addContent(self, name, content, initiator='we'): 
     83        def addContent(self, name, content, creator='we'): 
    8884                ''' Add new content to session. If the session is active, 
    8985                this will send proper stanza to update session.  
    9086                The protocol prohibits changing that when pending. 
    91                 Initiator must be one of ('we', 'peer', 'initiator', 'responder')''' 
     87                Creator must be one of ('we', 'peer', 'initiator', 'responder')''' 
    9288                if self.state==JingleStates.pending: 
    9389                        raise WrongState 
    9490 
    95                 if (initiator=='we' and self.weinitiate) or (initiator=='peer' and not self.weinitiate): 
    96                         initiator='initiator' 
    97                 elif (initiator=='peer' and self.weinitiate) or (initiator=='we' and not self.weinitiate): 
    98                         initiator='responder' 
    99                 content.creator = initiator 
     91                if (creator=='we' and self.weinitiate) or (creator=='peer' and not self.weinitiate): 
     92                        creator='initiator' 
     93                elif (creator=='peer' and self.weinitiate) or (creator=='we' and not self.weinitiate): 
     94                        creator='responder' 
     95                content.creator = creator 
    10096                content.name = name 
    101                 self.contents[(initiator,name)]=content 
     97                self.contents[(creator,name)]=content 
    10298 
    10399                if self.state==JingleStates.active: 
     
    118114 
    119115        def sendSessionInfo(self): pass 
    120         def sendTransportInfo(self): pass 
    121116 
    122117        ''' Callbacks. ''' 
     
    166161                self.initiator = jingle['initiator'] 
    167162                self.responder = self.ourjid 
    168                 self.jid = self.initiator 
     163                self.peerjid = self.initiator 
    169164 
    170165                fail = True 
     
    256251                assert self.state!=JingleStates.ended 
    257252 
    258         def __transportInfo(self): 
     253        def sendTransportInfo(self, content): 
    259254                assert self.state!=JingleStates.ended 
     255                stanza, jingle = self.__makeJingle('transport-info') 
     256                jingle.addChild(node=content) 
     257                self.connection.connection.send(stanza) 
    260258 
    261259        '''Callbacks''' 
     
    369367                return xmpp.Node(xmpp.NS_JINGLE_ICE_UDP+' transport') 
    370368 
    371 class JingleVoiP(object): 
     369class JingleContent(object): 
     370        ''' An abstraction of content in Jingle sessions. ''' 
     371        def __init__(self, session, node=None): 
     372                self.session = session 
     373                # will be filled by JingleSession.add_content() 
     374                # don't uncomment these lines, we will catch more buggy code then 
     375                # (a JingleContent not added to session shouldn't send anything) 
     376                #self.creator = None 
     377                #self.name = None 
     378 
     379class JingleVoiP(JingleContent): 
    372380        ''' Jingle VoiP sessions consist of audio content transported 
    373381        over an ICE UDP protocol. ''' 
    374382        __metaclass__=meta.VerboseClassType 
    375383        def __init__(self, session, node=None): 
    376                 self.session = session 
     384                JingleContent.__init__(self, session, node) 
    377385                self.codecs = None 
    378386 
     
    393401                        ]) 
    394402 
     403        def __content(self, payload=[]): 
     404                ''' Build a XML content-wrapper for our data. ''' 
     405                return xmpp.Node('content', 
     406                        attrs={'name': self.name, 'creator': self.creator, 'profile': 'RTP/AVP'}, 
     407                        payload=payload) 
     408 
    395409        def setupStream(self): 
    396                 self.p2pstream = self.session.p2psession.create_stream(FARSIGHT_MEDIA_TYPE_AUDIO, FARSIGHT_STREAM_DIRECTION_BOTH) 
     410                self.p2pstream = self.session.p2psession.create_stream( 
     411                        farsight.MEDIA_TYPE_AUDIO, farsight.STREAM_DIRECTION_BOTH) 
    397412                self.p2pstream.set_property('transmitter', 'libjingle') 
    398413                self.p2pstream.connect('error', self.on_p2pstream_error) 
     
    410425        def on_p2pstream_state_changed(self, *whatever): pass 
    411426        def on_p2pstream_new_native_candidate(self, p2pstream, candidate_id): 
    412                 candidate = p2pstream.get_native_candidate(candidate_id) 
    413  
     427                candidates = p2pstream.get_native_candidate(candidate_id) 
     428 
     429                for candidate in candidates: 
     430                        attrs={ 
     431                                'component': candidate['component'], 
     432                                'foundation': '1', # hack 
     433                                'generation': '0', 
     434                                'ip': candidate['ip'], 
     435                                'network': '0', 
     436                                'port': candidate['port'], 
     437                                'priority': int(100000*candidate['preference']), # hack 
     438                                'protocol': candidate['proto']==farsight.NETWORK_PROTOCOL_UDP and 'udp' or 'tcp', 
     439                        } 
     440                        if 'username' in candidate: attrs['ufrag']=candidate['username'] 
     441                        if 'password' in candidate: attrs['pwd']=candidate['password'] 
     442                        c=self.__content() 
     443                        t=c.addChild(xmpp.NS_JINGLE_ICE_UDP+' transport') 
     444                        t.addChild('candidate', attrs=attrs) 
     445                        self.session.sendTransportInfo(c) 
    414446 
    415447        def getCodecs(self):