Changeset 8493 for branches/jingle/src
- Timestamp:
- 08/12/07 23:22:25 (17 months ago)
- Location:
- branches/jingle/src/common
- Files:
-
- 3 modified
-
farsight/farsightmodule.c (modified) (2 diffs)
-
farsight/farsight.override (modified) (7 diffs)
-
jingle.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/jingle/src/common/farsight/farsightmodule.c
r8473 r8493 1 1 #include <pygobject.h> 2 2 #include <stdio.h> 3 4 #include <farsight/farsight-codec.h> 5 #include <farsight/farsight-stream.h> 6 #include <farsight/farsight-transmitter.h> 3 7 4 8 void farsight_register_classes (PyObject *d); … … 17 21 farsight_register_classes (d); 18 22 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); 20 66 21 67 if (PyErr_Occurred ()) { -
branches/jingle/src/common/farsight/farsight.override
r8490 r8493 105 105 fti->type = get_long_from_dict(dict, "type"); 106 106 107 if (PyErr or_Occurred()) return;107 if (PyErr_Occurred()) return; 108 108 109 109 /* optional */ … … 111 111 fti->password = get_str_from_dict(dict, "password"); 112 112 113 PyErr or_Clear();113 PyErr_Clear(); 114 114 } 115 115 … … 125 125 fc->encoding_name = get_str_from_dict(dict, "encoding_name"); 126 126 127 if (PyErr or_Occured()) return;127 if (PyErr_Occurred()) return; 128 128 129 129 /* optional data */ … … 336 336 } 337 337 338 if(!PyErr or_Occurred()) {338 if(!PyErr_Occurred()) { 339 339 farsight_stream_set_remote_candidate_list(FARSIGHT_STREAM(self->obj), candidate_list); 340 340 } … … 343 343 g_list_free(candidate_list); 344 344 345 if(!PyErr or_Occurred()) {345 if(!PyErr_Occurred()) { 346 346 Py_INCREF(Py_None); 347 347 return Py_None; … … 380 380 } 381 381 382 if (!PyErr or_Occurred()) {382 if (!PyErr_Occurred()) { 383 383 farsight_stream_set_remote_codecs(FARSIGHT_STREAM(self->obj), codecs_list); 384 384 } … … 388 388 g_list_free(codecs_list); 389 389 390 if (!PyErr or_Occurred()) {390 if (!PyErr_Occurred()) { 391 391 Py_INCREF(Py_None); 392 392 return Py_None; -
branches/jingle/src/common/jingle.py
r8490 r8493 21 21 import farsight 22 22 sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_LOCAL) 23 FARSIGHT_MEDIA_TYPE_AUDIO=024 FARSIGHT_STREAM_DIRECTION_BOTH=325 FARSIGHT_NETWORK_PROTOCOL_UDP=026 FARSIGHT_CANDIDATE_TYPE_LOCAL=027 23 28 24 import meta … … 85 81 ''' Middle-level functions to manage contents. Handle local content 86 82 cache and send change notifications. ''' 87 def addContent(self, name, content, initiator='we'):83 def addContent(self, name, content, creator='we'): 88 84 ''' Add new content to session. If the session is active, 89 85 this will send proper stanza to update session. 90 86 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')''' 92 88 if self.state==JingleStates.pending: 93 89 raise WrongState 94 90 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 = initiator91 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 100 96 content.name = name 101 self.contents[( initiator,name)]=content97 self.contents[(creator,name)]=content 102 98 103 99 if self.state==JingleStates.active: … … 118 114 119 115 def sendSessionInfo(self): pass 120 def sendTransportInfo(self): pass121 116 122 117 ''' Callbacks. ''' … … 166 161 self.initiator = jingle['initiator'] 167 162 self.responder = self.ourjid 168 self. jid = self.initiator163 self.peerjid = self.initiator 169 164 170 165 fail = True … … 256 251 assert self.state!=JingleStates.ended 257 252 258 def __transportInfo(self):253 def sendTransportInfo(self, content): 259 254 assert self.state!=JingleStates.ended 255 stanza, jingle = self.__makeJingle('transport-info') 256 jingle.addChild(node=content) 257 self.connection.connection.send(stanza) 260 258 261 259 '''Callbacks''' … … 369 367 return xmpp.Node(xmpp.NS_JINGLE_ICE_UDP+' transport') 370 368 371 class JingleVoiP(object): 369 class 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 379 class JingleVoiP(JingleContent): 372 380 ''' Jingle VoiP sessions consist of audio content transported 373 381 over an ICE UDP protocol. ''' 374 382 __metaclass__=meta.VerboseClassType 375 383 def __init__(self, session, node=None): 376 self.session = session384 JingleContent.__init__(self, session, node) 377 385 self.codecs = None 378 386 … … 393 401 ]) 394 402 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 395 409 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) 397 412 self.p2pstream.set_property('transmitter', 'libjingle') 398 413 self.p2pstream.connect('error', self.on_p2pstream_error) … … 410 425 def on_p2pstream_state_changed(self, *whatever): pass 411 426 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) 414 446 415 447 def getCodecs(self):
