00087 {
00088 packetsRcvd = bytesRcvd = indicationsRcvd = 0;
00089 WATCH(packetsRcvd);
00090 WATCH(bytesRcvd);
00091 WATCH(indicationsRcvd);
00092
00093
00094 const char *address = par("address");
00095 int port = par("port");
00096 const char *connectAddress = par("connectAddress");
00097 int connectPort = par("connectPort");
00098
00099 bool active = par("active");
00100 simtime_t tOpen = par("tOpen");
00101 simtime_t tSend = par("tSend");
00102 long sendBytes = par("sendBytes");
00103 simtime_t tClose = par("tClose");
00104
00105 const char *script = par("sendScript");
00106 parseScript(script);
00107 if (sendBytes>0 && commands.size()>0)
00108 throw new cException("cannot use both sendScript and tSend+sendBytes");
00109
00110 socket.setOutputGate(gate("tcpOut"));
00111
00112
00113 waitUntil(tOpen);
00114
00115 socket.bind(*address ? IPvXAddress(address) : IPvXAddress(), port);
00116
00117 EV << "issuing OPEN command\n";
00118 if (ev.isGUI()) displayString().setTagArg("t",0, active?"connecting":"listening");
00119
00120 if (active)
00121 socket.connect(IPAddressResolver().resolve(connectAddress), connectPort);
00122 else
00123 socket.listen();
00124
00125
00126 while (socket.state()!=TCPSocket::CONNECTED)
00127 {
00128 socket.processMessage(receive());
00129 if (socket.state()==TCPSocket::SOCKERROR)
00130 return;
00131 }
00132
00133 EV << "connection established, starting sending\n";
00134 if (ev.isGUI()) displayString().setTagArg("t",0,"connected");
00135
00136
00137 if (sendBytes>0)
00138 {
00139 waitUntil(tSend);
00140 EV << "sending " << sendBytes << " bytes\n";
00141 cMessage *msg = new cMessage("data1");
00142 msg->setByteLength(sendBytes);
00143 socket.send(msg);
00144 }
00145 for (CommandVector::iterator i=commands.begin(); i!=commands.end(); ++i)
00146 {
00147 waitUntil(i->tSend);
00148 EV << "sending " << i->numBytes << " bytes\n";
00149 cMessage *msg = new cMessage("data1");
00150 msg->setByteLength(i->numBytes);
00151 socket.send(msg);
00152 }
00153
00154
00155 if (tClose>=0)
00156 {
00157 waitUntil(tClose);
00158 EV << "issuing CLOSE command\n";
00159 if (ev.isGUI()) displayString().setTagArg("t",0,"closing");
00160 socket.close();
00161 }
00162
00163
00164 for (;;)
00165 {
00166 cMessage *msg = receive();
00167 count(msg);
00168 socket.processMessage(msg);
00169 }
00170 }