/[resiprocate]/main/resip/dum/Dialog.cxx
ViewVC logotype

Diff of /main/resip/dum/Dialog.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2556 by ken, Sun Apr 4 20:37:18 2004 UTC revision 2577 by jason, Sun Apr 11 01:23:13 2004 UTC
# Line 9  Line 9 
9    
10  class ServerInviteSession;  class ServerInviteSession;
11    
12    Dialog::Dialog(DialogUsageManager& dum, const SipMessage& msg)
13       : mId(msg),
14         mDum(dum),
15         mLocalCSeq(0),
16         mRemoteCSeq(0),
17         mCallId(msg.header(h_CallID))
18    {
19       assert(msg.isFromWire());
20    
21       if (msg.isRequest()) // UAS
22       {
23          const SipMessage& request = msg;
24          mRouteSet = request.header(h_RecordRoutes);
25    
26          switch (request.header(h_CSeq).method())
27          {
28             case INVITE:
29             case SUBSRIBE:
30                if (request.exists(h_Contacts) && request.header(h_Contacts).size() == 1)
31                {
32                   NameAddr& contact = request.header(h_Contacts).front();
33                   if (isEqualNoCase(contact.uri().scheme(), Symbols::Sips) ||
34                       isEqualNoCase(contact.uri().scheme(), Symbols::Sip))
35                   {
36                      mRemoteTarget = contact;
37                   }
38                   else
39                   {
40                      InfoLog (<< "Got an INVITE or SUBSCRIBE with invalid scheme");
41                      DebugLog (<< request);
42                      throw Exception("Invalid dialog", __FILE__, __LINE__);
43                   }
44                }
45                else
46                {
47                   InfoLog (<< "Got an INVITE or SUBSCRIBE that doesn't have exactly one contact");
48                   DebugLog (<< request);
49                   throw Exception("Invalid dialog", __FILE__, __LINE__);
50                }
51                break;
52          }
53          
54          mRemoteCSeq = request.header(h_CSeq).sequence();
55          mLocalCSeq = 0;
56          
57          if ( response.header(h_From).exists(p_tag) ) // 2543 compat
58          {
59             mRemoteTag = response.header(h_From).param(p_tag);  
60          }
61          if ( response.header(h_To).exists(p_tag) )  // 2543 compat
62          {
63             mLocalTag = response.header(h_To).param(p_tag);
64          }
65          mMe = response.header(h_To);
66    
67          //mDialogId = mCallId;
68          //mDialogId.param(p_toTag) = mLocalTag;
69          //mDialogId.param(p_fromTag) = mRemoteTag;
70    
71          BaseUsage* usage = mCreator->makeUsage(response);
72          assert(usage);
73          mUsages.push_back(usage);
74    
75       }
76       else if (msg.isResponse())
77       {
78          const SipMessage& response = msg;
79          if (response.exists(h_RecordRoutes))
80          {
81             mRouteSet = response.header(h_RecordRoutes).reverse();
82          }
83    
84          switch (response.header(h_CSeq).method())
85          {
86             case INVITE:
87             case SUBSRIBE:
88                if (response.exists(h_Contacts) && response.header(h_Contacts).size() == 1)
89                {
90                   NameAddr& contact = response.header(h_Contacts).front();
91                   if (isEqualNoCase(contact.uri().scheme(), Symbols::Sips) ||
92                       isEqualNoCase(contact.uri().scheme(), Symbols::Sip))
93                   {
94                      mRemoteTarget = contact;
95                   }
96                   else
97                   {
98                      InfoLog (<< "Got an INVITE or SUBSCRIBE with invalid scheme");
99                      DebugLog (<< response);
100                      throw Exception("Invalid dialog", __FILE__, __LINE__);
101                   }
102                }
103                else
104                {
105                   InfoLog (<< "Got an INVITE or SUBSCRIBE that doesn't have exactly one contact");
106                   DebugLog (<< response);
107                   throw Exception("Invalid dialog", __FILE__, __LINE__);
108                }
109                break;
110          }
111    
112          mLocalCSeq = response.header(h_CSeq).sequence();
113    
114          if ( response.header(h_From).exists(p_tag) ) // 2543 compat
115          {
116             mLocalTag = response.header(h_From).param(p_tag);  
117          }
118          if ( response.header(h_To).exists(p_tag) )  // 2543 compat
119          {
120             mRemoteTag = response.header(h_To).param(p_tag);
121          }
122          mMe = response.header(h_From);
123    
124          //mDialogId = mCallId;
125          //mDialogId.param(p_toTag) = mLocalTag;
126          //mDialogId.param(p_fromTag) = mRemoteTag;
127    
128          BaseUsage* usage = mCreator->makeUsage(response);
129          assert(usage);
130          mUsages.push_back(usage);
131       }
132    }
133    
134  DialogId Dialog::getId() const  DialogId Dialog::getId() const
135  {  {
136      return mId;      return mId;
# Line 103  Line 225 
225  }  }
226    
227  void  void
228  Dialog::process(const SipMessage& msg)  Dialog::dispatch(const SipMessage& msg)
229    {
230       if (msg.isRequest())
231  {  {
232     switch (request.header(h_RequestLine).getMethod())     switch (request.header(h_RequestLine).getMethod())
233     {     {
# Line 155  Line 279 
279           break;           break;
280        }        }
281  }  }
282       else if (msg.isResponse())
283       {
284          
285       }
286       else
287       {
288          assert(0);
289       }
290    }
291    
292  void  void
293  Dialog::processNotify(const SipMessage& notify)  Dialog::processNotify(const SipMessage& notify)

Legend:
Removed from v.2556  
changed lines
  Added in v.2577

webmaster AT resiprocate DOT org
ViewVC Help
Powered by ViewVC 1.1.27