-#include "portable.h"
-#include "gras/Transport/transport_private.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(transport,gras,"Conveying bytes over the network");
-XBT_LOG_NEW_SUBCATEGORY(meas_trp,transport,"Conveying bytes over the network without formating for perf measurements");
-static short int _gras_trp_started = 0;
-
-static xbt_dict_t _gras_trp_plugins; /* All registered plugins */
-static void gras_trp_plugin_free(void *p); /* free one of the plugins */
-
-static void
-gras_trp_plugin_new(const char *name, gras_trp_setup_t setup) {
- xbt_error_t errcode;
-
- gras_trp_plugin_t *plug = xbt_new0(gras_trp_plugin_t, 1);
-
- DEBUG1("Create plugin %s",name);
-
- plug->name=xbt_strdup(name);
-
- errcode = setup(plug);
- switch (errcode) {
- case mismatch_error:
- /* SG plugin return mismatch when in RL mode (and vice versa) */
- free(plug->name);
- free(plug);
- break;
-
- case no_error:
- xbt_dict_set(_gras_trp_plugins,
- name, plug, gras_trp_plugin_free);
- break;
-
- default:
- DIE_IMPOSSIBLE;
- }
-
-}
-
-void gras_trp_init(void){
- if (!_gras_trp_started) {
- /* make room for all plugins */
- _gras_trp_plugins=xbt_dict_new();
-
-#ifdef HAVE_WINSOCK2_H
- /* initialize the windows mechanism */
- {
- WORD wVersionRequested;
- WSADATA wsaData;
-
- wVersionRequested = MAKEWORD( 2, 0 );
- xbt_assert0(WSAStartup( wVersionRequested, &wsaData ) == 0,
- "Cannot find a usable WinSock DLL");
-
- /* Confirm that the WinSock DLL supports 2.0.*/
- /* Note that if the DLL supports versions greater */
- /* than 2.0 in addition to 2.0, it will still return */
- /* 2.0 in wVersion since that is the version we */
- /* requested. */
-
- xbt_assert0(LOBYTE( wsaData.wVersion ) == 2 &&
- HIBYTE( wsaData.wVersion ) == 0,
- "Cannot find a usable WinSock DLL");
- INFO0("Found and initialized winsock2");
- } /* The WinSock DLL is acceptable. Proceed. */
-#elif HAVE_WINSOCK_H
- { WSADATA wsaData;
- xbt_assert0(WSAStartup( 0x0101, &wsaData ) == 0,
- "Cannot find a usable WinSock DLL");
- INFO0("Found and initialized winsock");
- }
-#endif
-
- /* Add plugins */
- gras_trp_plugin_new("tcp", gras_trp_tcp_setup);
- gras_trp_plugin_new("file",gras_trp_file_setup);
- gras_trp_plugin_new("sg",gras_trp_sg_setup);
-
- /* buf is composed, so it must come after the others */
- gras_trp_plugin_new("buf", gras_trp_buf_setup);
- }
-
- _gras_trp_started++;
-}
-
-void
-gras_trp_exit(void){
- xbt_dynar_t sockets = gras_socketset_get();
- gras_socket_t sock_iter;
- int cursor;
-
- if (_gras_trp_started == 0) {
- return;
- }
-
- if ( --_gras_trp_started == 0 ) {
-#ifdef HAVE_WINSOCK_H
- if ( WSACleanup() == SOCKET_ERROR ) {
- if ( WSAGetLastError() == WSAEINPROGRESS ) {
- WSACancelBlockingCall();
- WSACleanup();
- }
- }