US 7,522,581 B2
Overload protection for SIP servers
Arup Acharya, Nanuet, N.Y. (US); Erich M. Nahum, New York, N.Y. (US); John Michael Tracey, Scarsdale, N.Y. (US); Xiping Wang, Putnam Valley, N.Y. (US); Charles P. Wright, Hartsdale, N.Y. (US); and Zhen Xiao, White Plains, N.Y. (US)
Assigned to International Business Machines Corporation, Armonk, N.Y. (US)
Filed on Aug. 01, 2006, as Appl. No. 11/497,948.
Prior Publication US 2008/0031258 A1, Feb. 07, 2008
Int. Cl. H04L 12/66 (2006.01); H04L 12/28 (2006.01); H04L 12/56 (2006.01)
U.S. Cl. 370—352  [370/395.42] 1 Claim
OG exemplary drawing
 
1. A method for operating a server a session initiation protocol (SIP) server having a maximum capacity for servicing requests, the method-comprising steps of:
a) receiving a plurality of requests for an SIP message session, wherein said plurality of requests comprise: session initiation requests, session modification requests, and requests for binding a user to an address;
b) classifying each request according to a value, wherein said classifying step comprises:
b.1) running a classification algorithm at run time, the classification algorithm comprising steps of:
b.2) receiving a rule set, each rule comprising headers and conditions, wherein the rules with a numerically higher priority value have precedence over the rules with a numerically lower priority value and wherein a first matching rule will be applied for the rules with a same priority value, and the rules are sorted in decreasing order of priority such that a matching process can be stopped after a first matching rule is found; and wherein headers are classified as one of: simple headers, pseudo-headers, and derived headers, and wherein, in conjunction with user-defined derived headers, the user is allowed to specify complex data types comprising structures and complex data variables associated with arrays, pointers, and scalars;
b.3) creating a condition table by taking a union of all conditions in the rules;
b.4) creating a header table by extracting a common set of headers from the condition table;
b.5) extracting the relevant headers from the header table;
b.6) determining a matching rule;
b.7) creating a bit vector table;
b.8) selecting the matching rule according to data in the bit vector table; and
b.9) applying the matching rule to place the request in an appropriate queue from among a plurality of queues comprising a high priority queue, a medium priority queue, and a low priority queue; and wherein said value of the request is based upon a plurality of message types, the message types comprising: register message; presence subscription and notification; bye messages; specific destinations; source of the message; whether the message belongs to a session-in-progress; whether the message belongs to a new session setup; and within a message, retransmission of a message vs. the first instance the message is being sent;
c) determining a priority for handling the request according to the value, such that requests with higher values are assigned higher priorities;
d) placing each request in one of multiple queues according to its priority value; and
e) dropping the requests with the lowest priority when the plurality of requests are received at a rate that exceeds the maximum capacity.