Lines 109-114
BulkSendApplication::DoDispose (void)
|
Link Here
|
---|
|
109 |
Application::DoDispose (); |
109 |
Application::DoDispose (); |
110 |
} |
110 |
} |
111 |
|
111 |
|
|
|
112 |
void |
113 |
BulkSendApplication::SetSocket(Ptr<Socket> socket) |
114 |
{ |
115 |
m_socket = socket; |
116 |
} |
117 |
|
112 |
// Application Methods |
118 |
// Application Methods |
113 |
void BulkSendApplication::StartApplication (void) // Called at time specified by Start |
119 |
void BulkSendApplication::StartApplication (void) // Called at time specified by Start |
114 |
{ |
120 |
{ |
Lines 118-150
void BulkSendApplication::StartApplication (void) // Called at time specified by
|
Link Here
|
---|
|
118 |
if (!m_socket) |
124 |
if (!m_socket) |
119 |
{ |
125 |
{ |
120 |
m_socket = Socket::CreateSocket (GetNode (), m_tid); |
126 |
m_socket = Socket::CreateSocket (GetNode (), m_tid); |
|
|
127 |
} |
128 |
// Fatal error if socket type is not NS3_SOCK_STREAM or NS3_SOCK_SEQPACKET |
129 |
if (m_socket->GetSocketType () != Socket::NS3_SOCK_STREAM && |
130 |
m_socket->GetSocketType () != Socket::NS3_SOCK_SEQPACKET) |
131 |
{ |
132 |
NS_FATAL_ERROR ("Using BulkSend with an incompatible socket type. " |
133 |
"BulkSend requires SOCK_STREAM or SOCK_SEQPACKET. " |
134 |
"In other words, use TCP instead of UDP."); |
135 |
} |
121 |
|
136 |
|
122 |
// Fatal error if socket type is not NS3_SOCK_STREAM or NS3_SOCK_SEQPACKET |
137 |
if (Inet6SocketAddress::IsMatchingType (m_peer)) |
123 |
if (m_socket->GetSocketType () != Socket::NS3_SOCK_STREAM && |
138 |
{ |
124 |
m_socket->GetSocketType () != Socket::NS3_SOCK_SEQPACKET) |
139 |
m_socket->Bind6 (); |
125 |
{ |
140 |
} |
126 |
NS_FATAL_ERROR ("Using BulkSend with an incompatible socket type. " |
141 |
else if (InetSocketAddress::IsMatchingType (m_peer)) |
127 |
"BulkSend requires SOCK_STREAM or SOCK_SEQPACKET. " |
142 |
{ |
128 |
"In other words, use TCP instead of UDP."); |
143 |
m_socket->Bind (); |
129 |
} |
144 |
} |
130 |
|
145 |
|
131 |
if (Inet6SocketAddress::IsMatchingType (m_peer)) |
146 |
m_socket->Connect (m_peer); |
132 |
{ |
147 |
m_socket->ShutdownRecv (); |
133 |
m_socket->Bind6 (); |
148 |
m_socket->SetConnectCallback ( |
134 |
} |
149 |
MakeCallback (&BulkSendApplication::ConnectionSucceeded, this), |
135 |
else if (InetSocketAddress::IsMatchingType (m_peer)) |
150 |
MakeCallback (&BulkSendApplication::ConnectionFailed, this)); |
136 |
{ |
151 |
m_socket->SetSendCallback ( |
137 |
m_socket->Bind (); |
152 |
MakeCallback (&BulkSendApplication::DataSend, this)); |
138 |
} |
|
|
139 |
|
153 |
|
140 |
m_socket->Connect (m_peer); |
|
|
141 |
m_socket->ShutdownRecv (); |
142 |
m_socket->SetConnectCallback ( |
143 |
MakeCallback (&BulkSendApplication::ConnectionSucceeded, this), |
144 |
MakeCallback (&BulkSendApplication::ConnectionFailed, this)); |
145 |
m_socket->SetSendCallback ( |
146 |
MakeCallback (&BulkSendApplication::DataSend, this)); |
147 |
} |
148 |
if (m_connected) |
154 |
if (m_connected) |
149 |
{ |
155 |
{ |
150 |
SendData (); |
156 |
SendData (); |
Lines 200-205
void BulkSendApplication::SendData (void)
|
Link Here
|
---|
|
200 |
// Check if time to close (all sent) |
206 |
// Check if time to close (all sent) |
201 |
if (m_totBytes == m_maxBytes && m_connected) |
207 |
if (m_totBytes == m_maxBytes && m_connected) |
202 |
{ |
208 |
{ |
|
|
209 |
if (! m_dataTransferred.IsNull ()) |
210 |
m_dataTransferred (m_node); |
211 |
|
203 |
m_socket->Close (); |
212 |
m_socket->Close (); |
204 |
m_connected = false; |
213 |
m_connected = false; |
205 |
} |
214 |
} |
Lines 229-234
void BulkSendApplication::DataSend (Ptr<Socket>, uint32_t)
|
Link Here
|
---|
|
229 |
} |
238 |
} |
230 |
} |
239 |
} |
231 |
|
240 |
|
232 |
|
241 |
void BulkSendApplication::SetDataTransferredCallback (Callback<void, Ptr<Node> > dataTransferred) |
|
|
242 |
{ |
243 |
m_dataTransferred = dataTransferred; |
244 |
} |
233 |
|
245 |
|
234 |
} // Namespace ns3 |
246 |
} // Namespace ns3 |