diff --git a/pyVoIP/SIP.py b/pyVoIP/SIP.py index e6531f1..39a84a1 100644 --- a/pyVoIP/SIP.py +++ b/pyVoIP/SIP.py @@ -481,7 +481,7 @@ def parseSIPMessage(self, data): class SIPClient(): def __init__(self, server, port, username, password, myIP=None, myPort=5060, callCallback=None): - self.NSD = True + self.NSD = False self.server = server self.port = port self.hostname = socket.gethostname() @@ -569,6 +569,9 @@ def parseMessage(self, message): debug("TODO: Add 400 Error on non processable request") def start(self): + if self.NSD == True: + raise RunTimeError("Attempted to start already started SIPClient") + self.NSD = True self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #self.out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.s.bind((self.myIP, self.myPort)) @@ -596,17 +599,19 @@ def genTag(self): return tag def genSIPVersionNotSupported(self, request): - regRequest = "SIP/2.0 505 SIP Version Not Supported\r\n" - regRequest += "Via: SIP/2.0/UDP "+request.headers['Via']['address'][0]+":"+request.headers['Via']['address'][1]+";branch="+request.headers['Via']['branch']+"\r\n" - regRequest += "From: "+request.headers['From']['raw']+";tag="+request.headers['From']['tag']+"\r\n" - regRequest += "To: "+request.headers['To']['raw']+";tag="+self.genTag()+"\r\n" - regRequest += "Call-ID: "+request.headers['Call-ID']+"\r\n" - regRequest += "CSeq: "+request.headers['CSeq']['check']+" "+request.headers['CSeq']['method']+"\r\n" - regRequest += "Contact: "+request.headers['Contact']+"\r\n" #TODO: Add Supported - regRequest += "User-Agent: pyVoIP """+pyVoIP.__version__+"\r\n" - regRequest += "Warning: 399 GS \"Unable to accept call\"\r\n" - regRequest += "Allow: "+(", ".join(pyVoIP.SIPCompatibleMethods))+"\r\n" - regRequest += "Content-Length: 0\r\n\r\n" + response = "SIP/2.0 505 SIP Version Not Supported\r\n" + response += "Via: SIP/2.0/UDP "+request.headers['Via']['address'][0]+":"+request.headers['Via']['address'][1]+";branch="+request.headers['Via']['branch']+"\r\n" + response += "From: "+request.headers['From']['raw']+";tag="+request.headers['From']['tag']+"\r\n" + response += "To: "+request.headers['To']['raw']+";tag="+self.genTag()+"\r\n" + response += "Call-ID: "+request.headers['Call-ID']+"\r\n" + response += "CSeq: "+request.headers['CSeq']['check']+" "+request.headers['CSeq']['method']+"\r\n" + response += "Contact: "+request.headers['Contact']+"\r\n" #TODO: Add Supported + response += "User-Agent: pyVoIP """+pyVoIP.__version__+"\r\n" + response += "Warning: 399 GS \"Unable to accept call\"\r\n" + response += "Allow: "+(", ".join(pyVoIP.SIPCompatibleMethods))+"\r\n" + response += "Content-Length: 0\r\n\r\n" + + return response def genAuthorization(self, request): HA1 = hashlib.md5(self.username.encode('utf8')+b':'+request.authentication['realm'].encode('utf8')+b':'+self.password.encode('utf8')).hexdigest().encode('utf8') diff --git a/pyVoIP/VoIP.py b/pyVoIP/VoIP.py index 5852c15..ffd1429 100644 --- a/pyVoIP/VoIP.py +++ b/pyVoIP/VoIP.py @@ -350,7 +350,11 @@ def callback(self, request): self.sip.out.sendto(ack.encode('utf8'), (self.server, self.port)) def start(self): - self.sip.start() + try: + self.sip.start() + except Exception: + self.sip.stop() + raise def stop(self): for x in self.calls.copy(): @@ -372,4 +376,4 @@ def call(self, number): request, call_id, sess_id = self.sip.invite(number, medias, pyVoIP.RTP.TransmitType.SENDRECV) self.calls[call_id] = VoIPCall(self, CallState.DIALING, request, sess_id, self.myIP, ms = medias) - return self.calls[call_id] \ No newline at end of file + return self.calls[call_id]