MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / ShowSAMSession

Function ShowSAMSession

daemon/HTTPServer.cpp:1052–1102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1050 }
1051
1052 void ShowSAMSession (std::stringstream& s, const std::string& id)
1053 {
1054 auto sam = i2p::client::context.GetSAMBridge ();
1055 if (!sam)
1056 {
1057 ShowError(s, tr("SAM disabled"));
1058 return;
1059 }
1060 if (id.empty ())
1061 {
1062 ShowError(s, tr("No sam_id"));
1063 return;
1064 }
1065 std::vector<uint8_t> sam_id(id.length ()); // id is in base64
1066 size_t l = i2p::data::Base64ToByteStream (id, sam_id.data (), sam_id.size ());
1067 if (!l)
1068 {
1069 ShowError(s, tr("Invalid sam_id"));
1070 return;
1071 }
1072 auto session = sam->FindSession ( { (const char *)sam_id.data (), l });
1073 if (!session)
1074 {
1075 ShowError(s, tr("SAM session not found"));
1076 return;
1077 }
1078
1079 std::string webroot; i2p::config::GetOption("http.webroot", webroot);
1080 s << "<b>" << tr("SAM Session") << ":</b><br>\r\n<div class=\"list\">\r\n";
1081 auto& ident = session->GetLocalDestination ()->GetIdentHash();
1082 s << "<div class=\"listitem\"><a href=\"" << webroot << "?page=" << HTTP_PAGE_LOCAL_DESTINATION << "&b32=" << ident.ToBase32 () << "\">";
1083 s << i2p::client::context.GetAddressBook ().ToAddress(ident) << "</a></div>\r\n";
1084 s << "</div>\r\n<br>\r\n";
1085 s << "<b>" << tr("Streams") << ":</b><br>\r\n<div class=\"list\">\r\n";
1086 for (const auto& it: sam->ListSockets({ (const char *)sam_id.data (), l }))
1087 {
1088 s << "<div class=\"listitem\">";
1089 switch (it->GetSocketType ())
1090 {
1091 case i2p::client::SAMSocketType::eSAMSocketTypeSession : s << "session"; break;
1092 case i2p::client::SAMSocketType::eSAMSocketTypeStream : s << "stream"; break;
1093 case i2p::client::SAMSocketType::eSAMSocketTypeAcceptor : s << "acceptor"; break;
1094 case i2p::client::SAMSocketType::eSAMSocketTypeForward : s << "forward"; break;
1095 default: s << "unknown"; break;
1096 }
1097 if (it->GetSocketType () != i2p::client::SAMSocketType::eSAMSocketTypeTerminated && it->GetSocket ().is_open ())
1098 s << " [" << it->GetSocket ().remote_endpoint() << "]";
1099 s << "</div>\r\n";
1100 }
1101 s << "</div>\r\n";
1102 }
1103
1104 void ShowI2PTunnels (std::stringstream& s)
1105 {

Callers 1

HandlePageMethod · 0.85

Calls 11

ShowErrorFunction · 0.85
trFunction · 0.85
Base64ToByteStreamFunction · 0.85
GetOptionFunction · 0.85
GetSAMBridgeMethod · 0.80
ToAddressMethod · 0.80
ListSocketsMethod · 0.80
GetSocketTypeMethod · 0.80
GetSocketMethod · 0.80
FindSessionMethod · 0.45
GetLocalDestinationMethod · 0.45

Tested by

no test coverage detected