+ uint32_t toWrite = min (mysocket->remaining, txSpace);
+ uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t)*toWrite);
+ int amountSent = localSocket->Send (&data[0], toWrite, 0);
+ free (data);
+ if (amountSent > 0){
+ mysocket->bufferedBytes += amountSent;
+ mysocket->remaining -= amountSent;
+ }
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "send_cb of F[" << mysocket->totalBytes << "] ("<< mysocket->remaining << " / " << mysocket->totalBytes << ") " << amountSent << " buffered." << endl;
+
+ if (mysocket->remaining == 0){
+ //everything was buffered to send, tell NS3 to close the socket
+ localSocket->Close();
+ }
+ return;
+}
+
+static void datasent_callback(Ptr<Socket> localSocket, uint32_t dataSent){
+ MySocket* mysocket = (MySocket*)xbt_dict_get_or_null(dict_socket,(char*)&localSocket);
+ mysocket->sentBytes += dataSent;
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "datasent_cb of F[" << mysocket->totalBytes << "] " << dataSent << " sent." << endl;
+}
+
+static void normalClose_callback(Ptr<Socket> localSocket){
+ MySocket* mysocket = (MySocket*)xbt_dict_get_or_null(dict_socket,(char*)&localSocket);
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "normalClose_cb of F[" << mysocket->totalBytes << "]" << endl;
+ receive_callback (localSocket);
+}
+
+static void errorClose_callback(Ptr<Socket> localSocket){
+ MySocket* mysocket = (MySocket*)xbt_dict_get_or_null(dict_socket,(char*)&localSocket);
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "errorClose_cb of F[" << mysocket->totalBytes << "]" << endl;
+ xbt_die("NS3: a socket was closed anormally");
+}
+
+static void succeededConnect_callback(Ptr<Socket> localSocket){
+ MySocket* mysocket = (MySocket*)xbt_dict_get_or_null(dict_socket,(char*)&localSocket);
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "succeededConnect_cb of F[" << mysocket->totalBytes << "]" << endl;
+}
+
+static void failedConnect_callback(Ptr<Socket> localSocket){
+ MySocket* mysocket = (MySocket*)xbt_dict_get_or_null(dict_socket,(char*)&localSocket);
+// cout << "[" << Simulator::Now ().GetSeconds() << "] " << "failedConnect_cb of F[" << mysocket->totalBytes << "]" << endl;
+ xbt_die("NS3: a socket failed to connect");