return send_response(p, &resp, retrans, seqno);
}
+static int determine_firstline_parts( struct sip_request *req ) {
+
+ char *e, *cmd;
+ int len;
+
+ cmd= req->header[0];
+ while(*cmd && (*cmd < 33)) {
+ cmd++;
+ }
+ if (!*cmd) {
+ return -1;
+ }
+ e= cmd;
+ while(*e && (*e > 32)) {
+ e++;
+ }
+ /* Get the command */
+ if (*e) {
+ *e = '\0';
+ e++;
+ }
+ req->rlPart1= cmd;
+ while( *e && ( *e < 33 ) ) {
+ e++;
+ }
+ if( !*e ) {
+ return -1;
+ }
+
+ if ( !strcasecmp(cmd, "SIP/2.0") ) {
+ /* We have a response */
+ req->rlPart2= e;
+ len= strlen( req->rlPart2 );
+ if( len < 2 ) { return -1; }
+ e+= len - 1;
+ while( *e && *e<33 ) {
+ e--;
+ }
+ *(++e)= '\0';
+ } else {
+ /* We have a request */
+ if( *e == '<' ) {
+ e++;
+ if( !*e ) { return -1; }
+ }
+ req->rlPart2= e;
+ if( ( e= strrchr( req->rlPart2, 'S' ) ) == NULL ) {
+ return -1;
+ }
+ while( isspace( *(--e) ) ) {}
+ if( *e == '>' ) {
+ *e= '\0';
+ } else {
+ *(++e)= '\0';
+ }
+ }
+ return 1;
+}
+
static int transmit_reinvite_with_sdp(struct sip_pvt *p, struct ast_rtp *rtp)
{
struct sip_request req;
/* Use this as the basis */
copy_request(&p->initreq, &req);
parse(&p->initreq);
+ determine_firstline_parts(&p->initreq);
p->lastinvite = p->ocseq;
p->outgoing = 1;
return send_request(p, &req, 1, p->ocseq);
/* Use this as the basis */
copy_request(&p->initreq, &req);
parse(&p->initreq);
+ determine_firstline_parts(&p->initreq);
}
p->lastinvite = p->ocseq;
return send_request(p, &req, 1, p->ocseq);
/* Use this as the basis */
copy_request(&p->initreq, &req);
parse(&p->initreq);
+ determine_firstline_parts(&p->initreq);
}
return send_request(p, &req, 1, p->ocseq);
add_blank_header(&req);
copy_request(&p->initreq, &req);
parse(&p->initreq);
+ determine_firstline_parts(&p->initreq);
r->regstate=auth?REG_STATE_AUTHSENT:REG_STATE_REGSENT;
return send_request(p, &req, 1, p->ocseq);
}
}
}
-static int determine_firstline_parts( struct sip_request *req ) {
-
- char *e, *cmd;
- int len;
-
- cmd= req->header[0];
- while(*cmd && (*cmd < 33)) {
- cmd++;
- }
- if (!*cmd) {
- return -1;
- }
- e= cmd;
- while(*e && (*e > 32)) {
- e++;
- }
- /* Get the command */
- if (*e) {
- *e = '\0';
- e++;
- }
- req->rlPart1= cmd;
- while( *e && ( *e < 33 ) ) {
- e++;
- }
- if( !*e ) {
- return -1;
- }
-
- if ( !strcasecmp(cmd, "SIP/2.0") ) {
- /* We have a response */
- req->rlPart2= e;
- len= strlen( req->rlPart2 );
- if( len < 2 ) { return -1; }
- e+= len - 1;
- while( *e && *e<33 ) {
- e--;
- }
- *(++e)= '\0';
- } else {
- /* We have a request */
- if( *e == '<' ) {
- e++;
- if( !*e ) { return -1; }
- }
- req->rlPart2= e;
- if( ( e= strrchr( req->rlPart2, 'S' ) ) == NULL ) {
- return -1;
- }
- while( isspace( *(--e) ) ) {}
- if( *e == '>' ) {
- *e= '\0';
- } else {
- *(++e)= '\0';
- }
- }
- return 1;
-}
-
static int attempt_transfer(struct sip_pvt *p1, struct sip_pvt *p2)
{
if (!p1->owner || !p2->owner) {