2 // Copyright (c) 2010-2017 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 #include <arpa/inet.h>
22 #include "stream2.hpp"
24 int Stream2::fromFile(ifstream *f)
27 if (streamHdr.fromFile(f))
29 if (actionsFromFile(f, streamHdr.actionCount))
37 int Stream2::actionsFromFile(ifstream *f, size_t actionCount)
39 m_actions.resize(actionCount);
40 for (size_t i = 0; i < actionCount; ++i)
41 f->read((char *)&m_actions[i], sizeof(Stream::ActionEntry));
46 int Stream2::setReferences(ifstream *f)
48 size_t toRead = streamHdr.clientHdrLen +
49 streamHdr.serverHdrLen +
50 streamHdr.clientContentLen +
51 streamHdr.serverContentLen;
53 delete [] clientServerHdrContent;
54 clientServerHdrContent = new uint8_t[toRead];
55 f->read((char *)clientServerHdrContent, toRead);
59 void Stream2::calcOffsets(ofstream *out)
61 size_t curPos = out->tellp();
63 clientHdrBeg = curPos;
64 serverHdrBeg = clientHdrBeg + streamHdr.clientHdrLen;
65 clientContentBeg = serverHdrBeg + streamHdr.serverHdrLen;
66 serverContentBeg = clientContentBeg + streamHdr.clientContentLen;
69 void Stream2::toFile(ofstream *out) const
71 size_t len = streamHdr.clientHdrLen +
72 streamHdr.serverHdrLen +
73 streamHdr.clientContentLen +
74 streamHdr.serverContentLen;
76 out->write((const char *)clientServerHdrContent, len);
79 static string ipToString(const uint32_t ip)
81 uint32_t ip_ne = htonl(ip);
84 ss << ((ip_ne >> 24) & 0xff) << "."
85 << ((ip_ne >> 16) & 0xff) << "."
86 << ((ip_ne >> 8) & 0xff) << "."
92 static string spaces(uint32_t count)
101 NetSocket Stream2::getServerNetSocket() const
103 return NetSocket(streamHdr.serverIP, ntohs(streamHdr.serverPort));
106 NetSocket Stream2::getClientNetSocket() const
108 return NetSocket(streamHdr.clientIP, ntohs(streamHdr.clientPort));
110 void Stream2::setServerNetSocket(const NetSocket& netSocket)
112 streamHdr.serverPort = htons(netSocket.port);
113 streamHdr.serverIP = netSocket.host;
116 void Stream2::setClientNetSocket(const NetSocket& netSocket)
118 streamHdr.clientPort = htons(netSocket.port);
119 streamHdr.clientIP = netSocket.host;
121 void Stream2::toLua(ofstream *f, const string& binFileName, const string& streamTableName) const
126 (*f) << streamTableName << "[" << streamHdr.streamId << "] = {" << endl
127 << spaces(3) << "client_data = {" << endl
128 << spaces(6) << "header = bin_read(" << binFileName << "," << clientHdrBeg << "," << streamHdr.clientHdrLen << "), " << endl
129 << spaces(6) << "content = bin_read(" << binFileName << "," << clientContentBeg << "," << streamHdr.clientContentLen << "), " << endl
130 << spaces(3) << "}," << endl
131 << spaces(3) << "server_data = {" << endl
132 << spaces(6) << "header = bin_read(" << binFileName << "," << serverHdrBeg << "," << streamHdr.serverHdrLen << "), " << endl
133 << spaces(6) << "content = bin_read(" << binFileName << "," << serverContentBeg << "," << streamHdr.serverContentLen << "), " << endl
134 << spaces(3) << "}," << endl
135 << spaces(3) << "actions = {" << endl;
137 for (size_t i = 0; i < m_actions.size(); ++i) {
138 const char *peer_str = m_actions[i].peer == 0? "client" : "server";
140 (*f) << spaces(6) << peer_str << "_content(" << m_actions[i].beg << "," << m_actions[i].len << ")," << endl;
143 (*f) << spaces(3) << "}," << endl
144 << spaces(3) << "clients = {ip = ip(\"" << ipToString(streamHdr.clientIP) << "\"), port = " << ntohs(streamHdr.clientPort) << "}," << endl
145 << spaces(3) << "servers = {ip = ip(\"" << ipToString(streamHdr.serverIP) << "\"), port = " << ntohs(streamHdr.serverPort) << "}," << endl
146 << spaces(3) << "l4_proto = \"" << (streamHdr.protocol == 0x06? "tcp" : "udp") << "\"," << endl
147 << spaces(3) << "up_bps = " << setprecision(4) << streamHdr.upRate << "," << endl
148 << spaces(3) << "dn_bps = " << setprecision(4) << streamHdr.dnRate << "," << endl;