示例#1
0
 def createRequest(self, method):
     if self.route_set:
         route = self.route_set[:]
         first_route = AddressHeader.parse(self.route_set[0])
         if not first_route.uri.lr:
             ruri = first_route.uri
             route.append(self.remote_target_uri)
         else:
             ruri = URI.parse(self.remote_target_uri)
     else:
         ruri = URI.parse(self.remote_target_uri)
         route = None
     request = Request(method, ruri)
     request.dialog = self
     h = request.headers
     if route:
         h['route'] = [AddressHeader.parse(s) for s in route]
     h['to'] = AddressHeader(uri=URI.parse(self.remote_uri),
                             params={'tag': self.remote_tag})
     h['from'] = AddressHeader(uri=URI.parse(self.local_uri),
                               params={'tag': self.local_tag})
     h['call-id'] = self.callid
     h['cseq'] = CSeqHeader(self.local_cseq, method)
     # XXX: follow 12.2.1.1 from rfc3261
     h['contact'] = AddressHeader.parse(self.local_target_uri)
     return request
示例#2
0
 def parse(cls, s):
     if '\r\n\r\n' not in s:
         raise MessageParsingError("Bad message (no CRLFCRLF found)")
     head, content = s.split('\r\n\r\n', 1)
     if not content:
         content = None
     if '\r\n' not in head:
         first_line = head
         hdrs = ''
     else:
         first_line, hdrs = head.split('\r\n', 1)
     headers = Headers.parse(hdrs)
     r = first_line.split(None, 2)
     if len(r) != 3:
         raise MessageParsingError("Bad first line: " + first_line)
     if r[0] == cls.version:
         code = int(r[1])
         reason = r[2]
         return Response(code, reason, headers, content)
     elif r[2] == cls.version:
         method = r[0]
         uri = URI.parse(r[1])
         return Request(method, uri, headers, content)
     else:
         raise MessageParsingError("Bad first line: " + first_line)
示例#3
0
 def parse(cls, s):
     display_name, uri, rest = cls._parse_nameaddr(s)
     if rest:
         params = cls._parse_params(rest)
     else:
         params = None
     uri = URI.parse(uri)
     return cls(display_name, uri, params)
示例#4
0
 def parse(cls, s):
     display_name, uri, rest = cls._parse_nameaddr(s)
     if rest:
         params = cls._parse_params(rest)
     else:
         params = None
     uri = URI.parse(uri)
     return cls(display_name, uri, params)
示例#5
0
 def createResponse(self, code=None, reason=None):
     response = Response(code, reason)
     response.transaction = self.transaction
     for x in ('from', 'to', 'call-id', 'cseq', 'via'):
         response.headers[x] = deepcopy(self.headers[x])
     if not self.has_totag:
         response.headers['to'].params['tag'] = self.response_totag
     if self.dialog:
         if 'record-route' in self.headers:
             response.headers['record-route'] = self.headers['record-route']
         contact_uri = URI.parse(self.dialog.local_target_uri)
         response.headers['contact'] = AddressHeader(uri=contact_uri)
     return response
示例#6
0
 def createRequest(self, method):
     if self.route_set:
         route = self.route_set[:]
         first_route = AddressHeader.parse(self.route_set[0])
         if not first_route.uri.lr:
             ruri = first_route.uri
             route.append(self.remote_target_uri)
         else:
             ruri = URI.parse(self.remote_target_uri)
     else:
         ruri = URI.parse(self.remote_target_uri)
         route = None
     request = Request(method, ruri)
     request.dialog = self
     h = request.headers
     if route:
         h['route'] = [AddressHeader.parse(s) for s in route]
     h['to'] = AddressHeader(uri=URI.parse(self.remote_uri), params={'tag': self.remote_tag})
     h['from'] = AddressHeader(uri=URI.parse(self.local_uri), params={'tag': self.local_tag})
     h['call-id'] = self.callid
     h['cseq'] = CSeqHeader(self.local_cseq, method)
     # XXX: follow 12.2.1.1 from rfc3261
     h['contact'] = AddressHeader.parse(self.local_target_uri)
     return request