Skip to content

Commit 35e5874

Browse files
committed
Make optional the reason phrase when reply-ing
Take the reason phrase corresponding with the cause code if none is given as parameter. If non is given as parameter and no corresponding reason phrase exist, take ' ' (double space) as reason phrase. - Yes, more than one server will complain. Let's see.
1 parent 025b381 commit 35e5874

File tree

8 files changed

+122
-102
lines changed

8 files changed

+122
-102
lines changed

src/Dialogs.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ JsSIP.Dialog.prototype = {
139139
} else if(request.method !== JsSIP.c.INVITE && request.cseq < this.remote_seqnum) {
140140
//Do not try to reply to an ACK request.
141141
if (request.method !== JsSIP.c.ACK) {
142-
request.reply(500, JsSIP.c.REASON_500);
142+
request.reply(500);
143143
}
144144
return false;
145145
} else if(request.cseq > this.remote_seqnum) {
@@ -152,17 +152,17 @@ JsSIP.Dialog.prototype = {
152152
if(request.cseq < this.remote_seqnum) {
153153
if(this.state === JsSIP.c.DIALOG_EARLY) {
154154
var retryAfter = (Math.random() * 10 | 0) + 1;
155-
request.reply(500, JsSIP.c.REASON_500, [
155+
request.reply(500, JsSIP.c.REASON_PHRASE[500], [
156156
'Retry-After:'+ retryAfter
157157
]);
158158
} else {
159-
request.reply(500, JsSIP.c.REASON_500);
159+
request.reply(500);
160160
}
161161
return false;
162162
}
163163
// RFC3261 14.2
164164
if(this.state === JsSIP.c.DIALOG_EARLY) {
165-
request.reply(491, JsSIP.c.REASON_491);
165+
request.reply(491);
166166
return false;
167167
}
168168
// RFC3261 12.2.2 Replace the dialog`s remote target URI

src/Message.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,14 @@ JsSIP.Message.prototype.init_incoming = function(request) {
167167
this.remote_identity = request.s('from').uri;
168168

169169
this.accept = function() {
170-
request.reply(200, JsSIP.c.REASON_200);
170+
request.reply(200);
171171
};
172172

173173
this.reject = function(status_code, reason_phrase) {
174174
if (status_code && reason_phrase) {
175175
request.reply(status_code, reason_phrase);
176176
} else {
177-
request.reply(480, JsSIP.c.REASON_480);
177+
request.reply(480);
178178
}
179179
};
180180

@@ -188,9 +188,9 @@ JsSIP.Message.prototype.init_incoming = function(request) {
188188
transaction = this.ua.transactions.nist[request.via_branch];
189189

190190
if (transaction && (transaction.state === JsSIP.c.TRANSACTION_TRYING || transaction.state === JsSIP.c.TRANSACTION_PROCEEDING)) {
191-
request.reply(200, JsSIP.c.REASON_200);
191+
request.reply(200);
192192
}
193193
} else {
194-
request.reply(415, JsSIP.c.REASON_415, ["Accept: text/plain, text/html"]);
194+
request.reply(415, JsSIP.c.REASON_PHRASE[415], ["Accept: text/plain, text/html"]);
195195
}
196196
};

src/SIPMessage.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,16 @@ JsSIP.IncomingRequest.prototype = new JsSIP.IncomingMessage();
343343
* @param {Function} [onFailure] onFailure callback
344344
*/
345345
JsSIP.IncomingRequest.prototype.reply = function(code, reason, extraHeaders, body, onSuccess, onFailure) {
346-
var rr, vias, header, length, idx,
347-
response = 'SIP/2.0 ' + code + ' ' + reason + '\r\n',
346+
var rr, vias, header, length, idx, response,
348347
to = this.getHeader('To'),
349348
r = 0,
350349
v = 0;
351350

351+
reason = reason || JsSIP.c.REASON_PHRASE[code] || ' ';
352352
extraHeaders = extraHeaders || [];
353353

354+
response = 'SIP/2.0 ' + code + ' ' + reason + '\r\n';
355+
354356
if(this.method === JsSIP.c.INVITE && code > 100 && code <= 200) {
355357
rr = this.countHeader('record-route');
356358

@@ -401,10 +403,13 @@ JsSIP.IncomingRequest.prototype.reply = function(code, reason, extraHeaders, bod
401403
* @param {String} reason reason phrase
402404
*/
403405
JsSIP.IncomingRequest.prototype.reply_sl = function(code, reason) {
404-
var to,
405-
response = 'SIP/2.0 ' + code + ' ' + reason + '\r\n',
406+
var to, response,
406407
vias = this.countHeader('via');
407408

409+
reason = reason || JsSIP.c.REASON_PHRASE[code] || ' ';
410+
411+
response = 'SIP/2.0 ' + code + ' ' + reason + '\r\n';
412+
408413
for(var v = 0; v < vias; v++) {
409414
response += 'Via: ' + this.getHeader('via', v) + '\r\n';
410415
}

src/SanityCheck.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ JsSIP.sanityCheck = (function() {
3737
// Sanity Check functions for requests
3838
function rfc3261_8_2_2_1() {
3939
if(message.s('to').scheme !== 'sip') {
40-
reply(416, JsSIP.c.REASON_416);
40+
reply(416);
4141
return false;
4242
}
4343
}
4444

4545
function rfc3261_16_3_4() {
4646
if(!message.to_tag) {
4747
if(message.call_id.substr(0, 5) === ua.configuration.jssip_id) {
48-
reply(482, JsSIP.c.REASON_482);
48+
reply(482);
4949
return false;
5050
}
5151
}
@@ -56,7 +56,7 @@ JsSIP.sanityCheck = (function() {
5656
contentLength = message.getHeader('content-length');
5757

5858
if(len < contentLength) {
59-
reply(400, JsSIP.c.REASON_400);
59+
reply(400);
6060
return false;
6161
}
6262
}
@@ -76,7 +76,7 @@ JsSIP.sanityCheck = (function() {
7676
for(idx in ua.transactions.ist) {
7777
tr = ua.transactions.ist[idx];
7878
if(tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) {
79-
reply(482, JsSIP.c.REASON_482);
79+
reply(482);
8080
return false;
8181
}
8282
}
@@ -89,7 +89,7 @@ JsSIP.sanityCheck = (function() {
8989
for(idx in ua.transactions.nist) {
9090
tr = ua.transactions.nist[idx];
9191
if(tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) {
92-
reply(482, JsSIP.c.REASON_482);
92+
reply(482);
9393
return false;
9494
}
9595
}
@@ -136,9 +136,9 @@ JsSIP.sanityCheck = (function() {
136136
}
137137

138138
// Reply
139-
function reply(status_code, reason_phrase) {
139+
function reply(status_code) {
140140
var to,
141-
response = "SIP/2.0 " + status_code + " " + reason_phrase + "\r\n",
141+
response = "SIP/2.0 " + status_code + " " + JsSIP.c.REASON_PHRASE[status_code] + "\r\n",
142142
via_length = message.countHeader('via'),
143143
idx = 0;
144144

src/Session.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ JsSIP.Session.prototype.receiveRequest = function(request) {
310310
// Transaction layer already responded 487 to the initial request.
311311

312312
// Reply 200 to CANCEL
313-
request.reply(200, JsSIP.c.REASON_200);
313+
request.reply(200);
314314

315315
/*
316316
* Terminate the whole session in case the user didn't accept nor reject the
@@ -332,7 +332,7 @@ JsSIP.Session.prototype.receiveRequest = function(request) {
332332
break;
333333
case JsSIP.c.BYE:
334334
if(this.status === JsSIP.c.SESSION_CONFIRMED) {
335-
request.reply(200, JsSIP.c.REASON_200);
335+
request.reply(200);
336336
this.ended('remote', request, JsSIP.c.causes.BYE);
337337
}
338338
break;
@@ -408,7 +408,7 @@ JsSIP.Session.prototype.receiveInitialRequest = function(ua, request) {
408408
return;
409409
}
410410

411-
request.reply(200, JsSIP.c.REASON_200, [
411+
request.reply(200, JsSIP.c.REASON_PHRASE[200], [
412412
'Contact: <' + session.contact + '>'],
413413
sdp,
414414
// onSuccess
@@ -437,7 +437,7 @@ JsSIP.Session.prototype.receiveInitialRequest = function(ua, request) {
437437

438438
onMediaFailure = function(e) {
439439
// Unable to get User Media
440-
request.reply(486, JsSIP.c.REASON_486);
440+
request.reply(486);
441441
session.failed('local', null, JsSIP.c.causes.USER_DENIED_MEDIA_ACCESS);
442442
};
443443

@@ -446,7 +446,7 @@ JsSIP.Session.prototype.receiveInitialRequest = function(ua, request) {
446446
* peerConnection.setRemoteDescription throws an exception
447447
*/
448448
console.log(JsSIP.c.LOG_SERVER_INVITE_SESSION +'PeerConnection Creation Failed: --'+e+'--');
449-
request.reply(488, JsSIP.c.REASON_488);
449+
request.reply(488);
450450
session.failed('remote', request, JsSIP.c.causes.BAD_MEDIA_DESCRIPTION);
451451
};
452452

@@ -461,7 +461,7 @@ JsSIP.Session.prototype.receiveInitialRequest = function(ua, request) {
461461
*/
462462
this.reject = function() {
463463
if (this.status === JsSIP.c.SESSION_WAITING_FOR_ANSWER) {
464-
request.reply(486, JsSIP.c.REASON_486);
464+
request.reply(486);
465465

466466
this.failed('local', null, JsSIP.c.causes.REJECTED);
467467
}
@@ -474,12 +474,12 @@ JsSIP.Session.prototype.receiveInitialRequest = function(ua, request) {
474474
if (this.status !== JsSIP.c.SESSION_TERMINATED) {
475475
this.progress('local');
476476

477-
request.reply(180, JsSIP.c.REASON_180, [
477+
request.reply(180, JsSIP.c.REASON_PHRASE[180], [
478478
'Contact: <' + this.contact + '>'
479479
]);
480480
}
481481
} else {
482-
request.reply(415, JsSIP.c.REASON_415);
482+
request.reply(415);
483483
}
484484
};
485485

@@ -639,7 +639,7 @@ JsSIP.Session.prototype.ackTimeout = function() {
639639
*/
640640
JsSIP.Session.prototype.expiresTimeout = function(request) {
641641
if(this.status === JsSIP.c.SESSION_WAITING_FOR_ANSWER) {
642-
request.reply(487, JsSIP.c.REASON_487);
642+
request.reply(487);
643643

644644
this.failed('system', null, JsSIP.c.causes.EXPIRES);
645645
}
@@ -660,7 +660,7 @@ JsSIP.Session.prototype.invite2xxRetransmission = function(retransmissions, requ
660660
if((retransmissions * JsSIP.Timers.T1) <= JsSIP.Timers.T2) {
661661
retransmissions += 1;
662662

663-
request.reply(200, JsSIP.c.REASON_200, [
663+
request.reply(200, JsSIP.c.REASON_PHRASE[200], [
664664
'Contact: <' + this.contact + '>'],
665665
body);
666666

@@ -678,7 +678,7 @@ JsSIP.Session.prototype.invite2xxRetransmission = function(retransmissions, requ
678678
* @private
679679
*/
680680
JsSIP.Session.prototype.userNoAnswerTimeout = function(request) {
681-
request.reply(408, JsSIP.c.REASON_408);
681+
request.reply(408);
682682

683683
this.failed('local',null, JsSIP.c.causes.NO_ANSWER);
684684
};

src/Transactions.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ JsSIP.Transactions.InviteServerTransaction = function(request, ua) {
552552

553553
this.reliableProvisionalTimer = null;
554554

555-
request.reply(100, JsSIP.c.REASON_100);
555+
request.reply(100);
556556
};
557557
JsSIP.Transactions.InviteServerTransaction.prototype = new InviteServerTransactionPrototype();
558558

@@ -622,13 +622,13 @@ JsSIP.Transactions.checkTransaction = function(ua, request) {
622622
tr = ua.transactions.ist[request.via_branch];
623623
if(tr) {
624624
if(tr.state === JsSIP.c.TRANSACTION_PROCEEDING) {
625-
tr.request.reply(487, JsSIP.c.REASON_487);
625+
tr.request.reply(487);
626626
return false;
627627
} else {
628628
return true;
629629
}
630630
} else {
631-
request.reply_sl(481, JsSIP.c.REASON_481);
631+
request.reply_sl(481);
632632
return true;
633633
}
634634
break;

src/UA.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
362362
//Check that Ruri points to us
363363
if(request.ruri.user !== this.configuration.user) {
364364
console.log(JsSIP.c.LOG_UA +'Request URI does not point to us');
365-
request.reply_sl(404, JsSIP.c.REASON_404);
365+
request.reply_sl(404);
366366
return;
367367
}
368368

@@ -384,13 +384,13 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
384384
* They are processed as if they had been received outside the dialog.
385385
*/
386386
if(method === JsSIP.c.OPTIONS) {
387-
request.reply(200, JsSIP.c.REASON_200, [
387+
request.reply(200, JsSIP.c.REASON_PHRASE[200], [
388388
'Allow: '+ JsSIP.utils.getAllowedMethods(this),
389389
'Accept: '+ JsSIP.c.ACCEPTED_BODY_TYPES
390390
]);
391391
} else if (method === JsSIP.c.MESSAGE) {
392392
if (!this.checkEvent('newMessage') || this.listeners('newMessage').length === 0) {
393-
request.reply(405, JsSIP.c.REASON_405, ['Allow: '+ JsSIP.utils.getAllowedMethods(this)]);
393+
request.reply(405, JsSIP.c.REASON_PHRASE[405], ['Allow: '+ JsSIP.utils.getAllowedMethods(this)]);
394394
return;
395395
}
396396
message = new JsSIP.Message(this);
@@ -401,7 +401,7 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
401401
if(!request.to_tag) {
402402
if(!this.registrator || (this.registrator && !this.registrator.registered)) {
403403
// High user does not want to be contacted
404-
request.reply(410, JsSIP.c.REASON_410);
404+
request.reply(410);
405405
return;
406406
}
407407

@@ -416,7 +416,7 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
416416
break;
417417
case JsSIP.c.BYE:
418418
// Out of dialog BYE received
419-
request.reply(481, JsSIP.c.REASON_481);
419+
request.reply(481);
420420
break;
421421
case JsSIP.c.CANCEL:
422422
session = this.findSession(request);
@@ -433,7 +433,7 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
433433
*/
434434
break;
435435
default:
436-
request.reply(405, JsSIP.c.REASON_405);
436+
request.reply(405);
437437
break;
438438
}
439439
}
@@ -459,7 +459,7 @@ JsSIP.UA.prototype.receiveRequest = function(request) {
459459
*/
460460
else {
461461
if(method !== JsSIP.c.ACK) {
462-
request.reply(481, JsSIP.c.REASON_481);
462+
request.reply(481);
463463
}
464464
}
465465
}

0 commit comments

Comments
 (0)