Skip to content

Commit ae25af6

Browse files
committed
Merge branch 'master' of github.com:tayler6000/pyVoIP
2 parents 2f09674 + 83cff21 commit ae25af6

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

pyVoIP/SIP.py

+17-12
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ def parseSIPMessage(self, data):
481481

482482
class SIPClient():
483483
def __init__(self, server, port, username, password, myIP=None, myPort=5060, callCallback=None):
484-
self.NSD = True
484+
self.NSD = False
485485
self.server = server
486486
self.port = port
487487
self.hostname = socket.gethostname()
@@ -569,6 +569,9 @@ def parseMessage(self, message):
569569
debug("TODO: Add 400 Error on non processable request")
570570

571571
def start(self):
572+
if self.NSD == True:
573+
raise RunTimeError("Attempted to start already started SIPClient")
574+
self.NSD = True
572575
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
573576
#self.out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
574577
self.s.bind((self.myIP, self.myPort))
@@ -596,17 +599,19 @@ def genTag(self):
596599
return tag
597600

598601
def genSIPVersionNotSupported(self, request):
599-
regRequest = "SIP/2.0 505 SIP Version Not Supported\r\n"
600-
regRequest += "Via: SIP/2.0/UDP "+request.headers['Via']['address'][0]+":"+request.headers['Via']['address'][1]+";branch="+request.headers['Via']['branch']+"\r\n"
601-
regRequest += "From: "+request.headers['From']['raw']+";tag="+request.headers['From']['tag']+"\r\n"
602-
regRequest += "To: "+request.headers['To']['raw']+";tag="+self.genTag()+"\r\n"
603-
regRequest += "Call-ID: "+request.headers['Call-ID']+"\r\n"
604-
regRequest += "CSeq: "+request.headers['CSeq']['check']+" "+request.headers['CSeq']['method']+"\r\n"
605-
regRequest += "Contact: "+request.headers['Contact']+"\r\n" #TODO: Add Supported
606-
regRequest += "User-Agent: pyVoIP """+pyVoIP.__version__+"\r\n"
607-
regRequest += "Warning: 399 GS \"Unable to accept call\"\r\n"
608-
regRequest += "Allow: "+(", ".join(pyVoIP.SIPCompatibleMethods))+"\r\n"
609-
regRequest += "Content-Length: 0\r\n\r\n"
602+
response = "SIP/2.0 505 SIP Version Not Supported\r\n"
603+
response += "Via: SIP/2.0/UDP "+request.headers['Via']['address'][0]+":"+request.headers['Via']['address'][1]+";branch="+request.headers['Via']['branch']+"\r\n"
604+
response += "From: "+request.headers['From']['raw']+";tag="+request.headers['From']['tag']+"\r\n"
605+
response += "To: "+request.headers['To']['raw']+";tag="+self.genTag()+"\r\n"
606+
response += "Call-ID: "+request.headers['Call-ID']+"\r\n"
607+
response += "CSeq: "+request.headers['CSeq']['check']+" "+request.headers['CSeq']['method']+"\r\n"
608+
response += "Contact: "+request.headers['Contact']+"\r\n" #TODO: Add Supported
609+
response += "User-Agent: pyVoIP """+pyVoIP.__version__+"\r\n"
610+
response += "Warning: 399 GS \"Unable to accept call\"\r\n"
611+
response += "Allow: "+(", ".join(pyVoIP.SIPCompatibleMethods))+"\r\n"
612+
response += "Content-Length: 0\r\n\r\n"
613+
614+
return response
610615

611616
def genAuthorization(self, request):
612617
HA1 = hashlib.md5(self.username.encode('utf8')+b':'+request.authentication['realm'].encode('utf8')+b':'+self.password.encode('utf8')).hexdigest().encode('utf8')

pyVoIP/VoIP.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,11 @@ def callback(self, request):
350350
self.sip.out.sendto(ack.encode('utf8'), (self.server, self.port))
351351

352352
def start(self):
353-
self.sip.start()
353+
try:
354+
self.sip.start()
355+
except Exception:
356+
self.sip.stop()
357+
raise
354358

355359
def stop(self):
356360
for x in self.calls.copy():
@@ -372,4 +376,4 @@ def call(self, number):
372376
request, call_id, sess_id = self.sip.invite(number, medias, pyVoIP.RTP.TransmitType.SENDRECV)
373377
self.calls[call_id] = VoIPCall(self, CallState.DIALING, request, sess_id, self.myIP, ms = medias)
374378

375-
return self.calls[call_id]
379+
return self.calls[call_id]

0 commit comments

Comments
 (0)