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
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)
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)
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