Skip to content

Commit b53b470

Browse files
committed
Merge pull request #181 from ryan-rowland/Add_RegisterContext_CloseWithHeaders
Added RegisterContext.closeHeaders logic
2 parents 873c9da + b43c03a commit b53b470

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/RegisterContext.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ RegisterContext.prototype = {
5151
extraHeaders.push('Contact: ' + this.contact + ';expires=' + this.expires);
5252
extraHeaders.push('Allow: ' + SIP.Utils.getAllowedMethods(this.ua));
5353

54+
// Save original extraHeaders to be used in .close
55+
this.closeHeaders = options.closeWithHeaders ?
56+
(this.options.extraHeaders || []).slice() : [];
57+
5458
this.receiveResponse = function(response) {
5559
var contact, expires,
5660
contacts = response.getHeaders('contact').length,
@@ -191,8 +195,13 @@ RegisterContext.prototype = {
191195
},
192196

193197
close: function() {
198+
var options = {
199+
all: false,
200+
extraHeaders: this.closeHeaders
201+
};
202+
194203
this.registered_before = this.registered;
195-
this.unregister();
204+
this.unregister(options);
196205
},
197206

198207
unregister: function(options) {

test/spec/SpecRegisterContext.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ describe('RegisterContext', function() {
7373
RegisterContext.register(options);
7474
expect(RegisterContext.send).toHaveBeenCalled();
7575
});
76+
77+
it('sets its closeHeaders property if options.closeWithHeaders flag is true', function() {
78+
RegisterContext.register({
79+
closeWithHeaders: true,
80+
extraHeaders: [ 'X-Foo: foo', 'X-Bar: bar' ]
81+
});
82+
expect(RegisterContext.closeHeaders.length).toBe(2);
83+
});
7684
});
7785

7886
describe('.registrationFailure', function() {
@@ -153,16 +161,25 @@ describe('RegisterContext', function() {
153161
beforeEach(function(){
154162
spyOn(RegisterContext, 'unregister').and.returnValue('unregister');
155163
});
156-
it('takes registered and move it to registerd_before', function() {
164+
165+
it('takes registered and move it to registered_before', function() {
157166
expect(RegisterContext.registered).not.toBe(RegisterContext.registered_before);
158167
RegisterContext.close();
159168
expect(RegisterContext.registered).toBe(RegisterContext.registered_before);
160169
});
161170

162-
it('calls unregister', function() {
171+
it('calls unregister with closeHeaders', function() {
172+
jasmine.addCustomEqualityTester(function objectEquality(a, b) {
173+
return a === b || JSON.stringify(a) === JSON.stringify(b);
174+
});
175+
163176
expect(RegisterContext.unregister).not.toHaveBeenCalled();
177+
178+
RegisterContext.closeHeaders = [ 'X-Foo: foo' ,'X-Bar: bar' ];
179+
var mockArgs = { all: false, extraHeaders: RegisterContext.closeHeaders };
180+
164181
RegisterContext.close();
165-
expect(RegisterContext.unregister).toHaveBeenCalledWith();
182+
expect(RegisterContext.unregister).toHaveBeenCalledWith(mockArgs);
166183
});
167184
});
168185

0 commit comments

Comments
 (0)