/[resiprocate]/main/resip/dum/test/certServer.cxx
ViewVC logotype

Diff of /main/resip/dum/test/certServer.cxx

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

revision 3530 by jason, Mon Nov 22 06:24:14 2004 UTC revision 3546 by jason, Mon Nov 22 20:59:36 2004 UTC
# Line 8  Line 8 
8    
9  #include <signal.h>  #include <signal.h>
10    
11    #include "resiprocate/NameAddr.hxx"
12    #include "resiprocate/Pkcs8Contents.hxx"
13  #include "resiprocate/SipMessage.hxx"  #include "resiprocate/SipMessage.hxx"
14  #include "resiprocate/Symbols.hxx"  #include "resiprocate/Symbols.hxx"
15  #include "resiprocate/Uri.hxx"  #include "resiprocate/Uri.hxx"
 #include "resiprocate/NameAddr.hxx"  
 #include "resiprocate/Pkcs8Contents.hxx"  
16  #include "resiprocate/X509Contents.hxx"  #include "resiprocate/X509Contents.hxx"
17  #include "resiprocate/dum/AppDialogSet.hxx"  #include "resiprocate/dum/AppDialogSet.hxx"
 #include "resiprocate/dum/ServerSubscription.hxx"  
 #include "resiprocate/dum/ServerPublication.hxx"  
18  #include "resiprocate/dum/ClientAuthManager.hxx"  #include "resiprocate/dum/ClientAuthManager.hxx"
19  #include "resiprocate/dum/DialogUsageManager.hxx"  #include "resiprocate/dum/DialogUsageManager.hxx"
20    #include "resiprocate/dum/DumShutdownHandler.hxx"
21  #include "resiprocate/dum/OutOfDialogHandler.hxx"  #include "resiprocate/dum/OutOfDialogHandler.hxx"
22  #include "resiprocate/dum/Profile.hxx"  #include "resiprocate/dum/Profile.hxx"
23    #include "resiprocate/dum/PublicationHandler.hxx"
24  #include "resiprocate/dum/RegistrationHandler.hxx"  #include "resiprocate/dum/RegistrationHandler.hxx"
25    #include "resiprocate/dum/ServerPublication.hxx"
26    #include "resiprocate/dum/ServerSubscription.hxx"
27  #include "resiprocate/dum/SubscriptionHandler.hxx"  #include "resiprocate/dum/SubscriptionHandler.hxx"
 #include "resiprocate/dum/PublicationHandler.hxx"  
 #include "resiprocate/dum/DumShutdownHandler.hxx"  
28  #include "resiprocate/os/Log.hxx"  #include "resiprocate/os/Log.hxx"
29  #include "resiprocate/os/Logger.hxx"  #include "resiprocate/os/Logger.hxx"
30  #include "resiprocate/os/Random.hxx"  #include "resiprocate/os/Random.hxx"
# Line 44  Line 44 
44     finished = true;     finished = true;
45  }  }
46    
47  class PublicationHandler : public ServerPublicationHandler  // When a publish comes in, we should let any outstanding subscriptions know
48    // about it.
49    
50    class CertSubscriptionHandler;
51    class PrivateKeySubscriptionHandler;
52    
53    class CertPublicationHandler : public ServerPublicationHandler
54  {  {
55     public:     public:
56        PublicationHandler(Security& security) : mSecurity(security)        CertPublicationHandler(Security& security) : mSecurity(security)
57        {        {
58        }        }
59    
60        virtual void onInitial(ServerPublicationHandle h, const Data& etag, const SipMessage& pub, int expires)        virtual void onInitial(ServerPublicationHandle h,
61                                 const Data& etag,
62                                 const SipMessage& pub,
63                                 const Contents* contents,
64                                 const SecurityAttributes* attrs,
65                                 int expires)
66        {        {
          Contents* contents=0;  
67           add(h, contents);           add(h, contents);
68        }        }
69    
70        virtual void onExpired(ServerPublicationHandle h, const Data& etag)        virtual void onExpired(ServerPublicationHandle h, const Data& etag)
71        {        {
72           removeUserCertDER(h->getPublisher());           mSecurity.removeUserCert(h->getPublisher());
73        }        }
74    
75        virtual void onRefresh(ServerPublicationHandle, const Data& etag, const SipMessage& pub, int expires)        virtual void onRefresh(ServerPublicationHandle,
76                                 const Data& etag,
77                                 const SipMessage& pub,
78                                 const Contents* contents,
79                                 const SecurityAttributes* attrs,
80                                 int expires)
81        {        {
82        }        }
83    
84        virtual void onUpdate(ServerPublicationHandle h, const Data& etag, const SipMessage& pub, int expires)        virtual void onUpdate(ServerPublicationHandle h,
85                                const Data& etag,
86                                const SipMessage& pub,
87                                const Contents* contents,
88                                const SecurityAttributes* attrs,
89                                int expires)
90        {        {
          Contents* contents=0;  
91           add(h, contents);           add(h, contents);
92             h->send(h->accept(200));
93        }        }
94    
95        virtual void onRemoved(ServerPublicationHandle, const Data& etag, const SipMessage& pub, int expires)        virtual void onRemoved(ServerPublicationHandle h, const Data& etag, const SipMessage& pub, int expires)
96        {        {
97           removeUserCertDER(h->getPublisher());           mSecurity.removeUserCert(h->getPublisher());
98        }        }
99     private:     private:
100        void add(ServerPublicationHandle h, Contents* contents)        void add(ServerPublicationHandle h, const Contents* contents)
101        {        {
102           X509Contents* x509 = dynamic_cast<X509Contents*>(contents);           const X509Contents* x509 = dynamic_cast<const X509Contents*>(contents);
103           assert(x509);           assert(x509);
104           addUserCertDER(h->getPublisher(), x509->getBodyData());           mSecurity.addUserCertDER(h->getPublisher(), x509->getBodyData());
105        }        }
106    
107        Security& mSecurity;        Security& mSecurity;
# Line 94  Line 114 
114        {        {
115        }        }
116    
117        virtual void onInitial(ServerPublicationHandle h, const Data& etag, const SipMessage& pub, int expires)        virtual void onInitial(ServerPublicationHandle h,
118                                 const Data& etag,
119                                 const SipMessage& pub,
120                                 const Contents* contents,
121                                 const SecurityAttributes* attrs,
122                                 int expires)
123        {        {
          Contents* contents=0;  
124           add(h, contents);           add(h, contents);
125        }        }
126    
127        virtual void onExpired(ServerPublicationHandle h, const Data& etag)        virtual void onExpired(ServerPublicationHandle h, const Data& etag)
128        {        {
129           removeUserPrivateKeyDER(h->getPublisher());           mSecurity.removeUserPrivateKey(h->getPublisher());
130        }        }
131    
132        virtual void onRefresh(ServerPublicationHandle, const Data& etag, const SipMessage& pub, int expires)        virtual void onRefresh(ServerPublicationHandle,
133                                 const Data& etag,
134                                 const SipMessage& pub,
135                                 const Contents* contents,
136                                 const SecurityAttributes* attrs,
137                                 int expires)
138        {        {
139        }        }
140    
141        virtual void onUpdate(ServerPublicationHandle, const Data& etag, const SipMessage& pub, int expires)        virtual void onUpdate(ServerPublicationHandle h,
142                                const Data& etag,
143                                const SipMessage& pub,
144                                const Contents* contents,
145                                const SecurityAttributes* attrs,
146                                int expires)
147        {        {
          Contents* contents=0;  
148           add(h, contents);           add(h, contents);
149             h->send(h->accept(200));
150        }        }
151    
152        virtual void onRemoved(ServerPublicationHandle, const Data& etag, const SipMessage& pub, int expires)        virtual void onRemoved(ServerPublicationHandle h, const Data& etag, const SipMessage& pub, int expires)
153        {        {
154           removeUserPrivateKeyDER(h->getPublisher());           mSecurity.removeUserPrivateKey(h->getPublisher());
155        }        }
156    
157     private:     private:
158        void add(ServerPublicationHandle h, Contents* contents)        void add(ServerPublicationHandle h, const Contents* contents)
159        {        {
160           Pkcs8Contents* pkcs8 = dynamic_cast<Pkcs8Contents*>(contents);           const Pkcs8Contents* pkcs8 = dynamic_cast<const Pkcs8Contents*>(contents);
161           assert(pkcs8);           assert(pkcs8);
162           addUserPrivateKeyDER(h->getPublisher(), pkcs8->getBodyData())           mSecurity.addUserPrivateKeyDER(h->getPublisher(), pkcs8->getBodyData());
163        }        }
164                
165        Security& mSecurity;        Security& mSecurity;
# Line 140  Line 174 
174    
175        virtual void onNewSubscription(ServerSubscriptionHandle h, const SipMessage& sub)        virtual void onNewSubscription(ServerSubscriptionHandle h, const SipMessage& sub)
176        {        {
177           if (mSecurity.hasUserCert(h->getPublisher()))           if (mSecurity.hasUserCert(h->getDocumentKey()))
178           {           {
179              X509Contents x509(mSecurity.getUserCertDER(h->getPublisher()));              X509Contents x509(mSecurity.getUserCertDER(h->getDocumentKey()));
180              h->send(h->update(&x509));              h->send(h->update(&x509));
181           }           }
182           else           else
# Line 151  Line 185 
185           }           }
186        }        }
187    
188          virtual void onPublished(ServerSubscriptionHandle associated,
189                                   ServerPublicationHandle publication,
190                                   const Contents* contents,
191                                   const SecurityAttributes* attrs)
192          {
193             associated->send(associated->update(contents));
194          }
195          
196    
197        virtual void onTerminated(ServerSubscriptionHandle)        virtual void onTerminated(ServerSubscriptionHandle)
198        {        {
199        }        }
# Line 170  Line 213 
213        {        {
214        }        }
215    
216        virtual void onNewSubscription(ServerSubscriptionHandle, const SipMessage& sub)        virtual void onNewSubscription(ServerSubscriptionHandle h, const SipMessage& sub)
217        {        {
218           if (mSecurity.hasUserCert(h->getPublisher()))           if (mSecurity.hasUserCert(h->getDocumentKey()))
219           {           {
220              Pkcs8Contents pkcs(mSecurity.getUserPrivateKeyDER(h->getPublisher()));              Pkcs8Contents pkcs(mSecurity.getUserPrivateKeyDER(h->getDocumentKey()));
221              h->send(h->update(&pkcs));              h->send(h->update(&pkcs));
222           }           }
223           else           else
# Line 183  Line 226 
226           }           }
227        }        }
228    
229          virtual void onPublished(ServerSubscriptionHandle associated,
230                                   ServerPublicationHandle publication,
231                                   const Contents* contents,
232                                   const SecurityAttributes* attrs)
233          {
234             associated->send(associated->update(contents));
235          }
236    
237        virtual void onTerminated(ServerSubscriptionHandle)        virtual void onTerminated(ServerSubscriptionHandle)
238        {        {
239        }        }
# Line 201  Line 252 
252     public:     public:
253        CertServer(const resip::NameAddr& me) :        CertServer(const resip::NameAddr& me) :
254           DialogUsageManager(),           DialogUsageManager(),
          mCertUpdater(getSecurity()),  
          mPrivateKeyUpdater(getSecurity()),  
255           mCertServer(getSecurity()),           mCertServer(getSecurity()),
256           mPrivateKeyServer(getSecurity())           mPrivateKeyServer(getSecurity()),
257             mCertUpdater(getSecurity()),
258             mPrivateKeyUpdater(getSecurity())
259        {        {
260           addTransport(UDP, 5100);           addTransport(UDP, 5100);
261           addTransport(TCP, 5100);           addTransport(TCP, 5100);
# Line 265  Line 316 
316    
317     private:     private:
318        Profile mProfile;        Profile mProfile;
       CertPublicationHandler mCertUpdater;  
       PrivateKeyPublicationHandler mPrivateKeyUpdater;  
319        CertSubscriptionHandler mCertServer;        CertSubscriptionHandler mCertServer;
320        PrivateKeySubscriptionHandler mPrivateKeyServer;        PrivateKeySubscriptionHandler mPrivateKeyServer;
321          CertPublicationHandler mCertUpdater;
322          PrivateKeyPublicationHandler mPrivateKeyUpdater;
323        bool mDone;        bool mDone;
324  };  };
325    

Legend:
Removed from v.3530  
changed lines
  Added in v.3546

webmaster AT resiprocate DOT org
ViewVC Help
Powered by ViewVC 1.1.26