00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifdef HAVE_CONFIG_H
00018 #include <dtn-config.h>
00019 #endif
00020
00021 #include <oasys/thread/Atomic.h>
00022
00023 #include "Session.h"
00024
00025 namespace dtn {
00026
00027
00028 Session::Session(const EndpointID& eid)
00029 : Logger("Session", "/dtn/session"),
00030 eid_(eid),
00031 bundles_(std::string("session-") + eid.str()),
00032 resubscribe_timer_(NULL)
00033 {
00034 static oasys::atomic_t next_session_id = 0;
00035 id_ = oasys::atomic_incr_ret(&next_session_id);
00036
00037 logpath_appendf("/%d", id_);
00038 log_info("created new session %u for eid %s", id_, eid.c_str());
00039 }
00040
00041
00042 Session::~Session()
00043 {
00044 }
00045
00046
00047 int
00048 Session::format(char* buf, size_t sz) const
00049 {
00050 return snprintf(buf, sz, "session id %u [%s]", id(), eid().c_str());
00051 }
00052
00053
00054 const char*
00055 Session::flag_str(u_int flags)
00056 {
00057
00058 switch (flags) {
00059 case 0: return "Session::NONE";
00060 case SUBSCRIBE: return "Session::SUBSCRIBE";
00061 case RESUBSCRIBE: return "Session::RESUBSCRIBE";
00062 case UNSUBSCRIBE: return "Session::UNSUBSCRIBE";
00063 case PUBLISH: return "Session::PUBLISH";
00064 case CUSTODY: return "Session::CUSTODY";
00065 default: {
00066 static char buf[256];
00067 snprintf(buf, sizeof(buf), "Session::UNKNOWN(0x%x)", flags);
00068 return buf;
00069 }
00070 }
00071 }
00072
00073
00074 void
00075 Session::set_upstream(const Subscriber& upstream)
00076 {
00077 upstream_ = upstream;
00078 log_info("set_upstream(*%p)", &upstream_);
00079
00080 add_subscriber(upstream);
00081 }
00082
00083
00084 void
00085 Session::add_subscriber(const Subscriber& subscriber)
00086 {
00087 if (std::find(subscribers_.begin(), subscribers_.end(), subscriber) !=
00088 subscribers_.end())
00089 {
00090 log_info("add_subscriber(*%p): already subscribed",
00091 &subscriber);
00092 return;
00093 }
00094
00095 subscribers_.push_back(subscriber);
00096 log_info("add_subscriber(*%p)", &subscriber);
00097 }
00098
00099 }