1#define _WIN32_WINNT 0x0501
7#define USE_WINDOWS_SOCKETS
8#define ioctl_socket(a, b, c) ioctlsocket (a, b, (u_long *) (c))
16#include <sys/socket.h>
17#include <sys/socketvar.h>
22#define INVALID_SOCKET -1
23#define WSAGetLastError() errno
24#define closesocket(fd) close(fd)
25#define ioctl_socket(a, b, c) ioctl(a, b, c)
34#include <netinet/in.h>
38#define INVALID_SOCKET -1
39#define WSAGetLastError() errno
40#define closesocket(fd) close(fd)
41#define ioctl_socket(a, b, c) ioctl(a, b, c)
66 int est_num_entries,
int est_name_len )
69hid_t lcpl_id = H5Pcreate(H5P_LINK_CREATE);
70 H5Pset_char_encoding(lcpl_id, H5T_CSET_UTF8);
72hid_t gcpl_id = H5Pcreate( H5P_GROUP_CREATE );
74 if (est_num_entries>=0 && est_name_len >=0)
76 H5Pset_est_link_info( gcpl_id, (
unsigned) est_num_entries, (
unsigned) est_name_len );
78 H5Pset_link_creation_order( gcpl_id, H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED );
80 id = H5Gcreate2(loc_id,
name, lcpl_id, gcpl_id, H5P_DEFAULT);
88 int est_num_entries,
int est_name_len )
95 id = H5Gopen2(loc_id,
name, H5P_DEFAULT );
100 id =
F5Gcreate(loc_id,
name, est_num_entries, est_name_len );
103 F5printf(0,
"F5Gcreate(`%s') failed on ID %d!\n",
name, (
int)loc_id);
115char *tree = strdup(
name);
116char *ptr = strtok(tree,
"/");
117hid_t group_id = loc_id;
120 hid_t subgroup_id =
F5Gappend(group_id, ptr);
122 F5printf(0,
"F5Gappend_tree - %s", ptr);
124 if (group_id != loc_id)
127 group_id = subgroup_id;
129 ptr = strtok(0,
"/");
137 const char *target_file_name,
138 const char *target_obj_name,
144 id = H5Gopen2(loc_id,
name, H5P_DEFAULT);
155hid_t lcpl_id = H5Pcreate(H5P_LINK_CREATE);
156 H5Pset_char_encoding( lcpl_id, H5T_CSET_UTF8 );
167hid_t lapl_id = H5Pcreate( H5P_LINK_ACCESS );
169 if (prefix && *prefix)
170 H5Pset_elink_prefix( lapl_id, prefix );
175 external_err = H5Lcreate_external( target_file_name, target_obj_name,
176 loc_id,
name, lcpl_id, lapl_id );
181 id = H5Gopen2(loc_id,
name, H5P_DEFAULT);
185 hid_t ExternalFileID, ExternalFileGroup;
186 F5printf(0,
"F5Gappend_external(%lli,%s, target_file_name=%s,target_obj_name=%s,prefix=%s) INFO - No external file yet, thus- CREATING external file structure", loc_id,
name,
190 ExternalFileID =
F5append( target_file_name );
191 if (ExternalFileID<0)
193 F5printf(0,
"F5GappendExternal(%lli,%s, target_file_name=%s,target_obj_name=%s,prefix=%s) FAILED CREATING external file", loc_id,
name,
199 ExternalFileGroup =
F5Gappend_tree(ExternalFileID, target_obj_name);
201 if (ExternalFileGroup<0)
203 F5printf(0,
"F5GappendExternal(%lli,%s, target_file_name=%s,target_obj_name=%s,prefix=%s) FAILED CREATING external file group", loc_id,
name,
210 H5Fclose( ExternalFileID );
212 id = H5Gopen2(loc_id,
name, H5P_DEFAULT);
215 F5printf(0,
"F5GappendExternal(%lli,%s, target_file_name=%s,target_obj_name=%s,prefix=%s) FAILED CREATING external file structure", loc_id,
name,
230 id = H5Fcreate (filename, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
234 return H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT);
239hid_t
F5Dappend(hid_t loc_id,
const char *
name, hid_t type_id, hid_t space_id, hid_t create_plist_id )
244 id = H5Dopen2(loc_id,
name, H5P_DEFAULT );
249 hid_t FileSpace_id = H5Dget_space(
id );
250 hssize_t NewPoints = H5Sget_simple_extent_npoints( space_id );
251 hssize_t OldPoints = H5Sget_simple_extent_npoints( FileSpace_id );
252 F5printf(41,
"F5Dappend(%lli,%s,...) opening existing dataset...", loc_id,
name);
253 H5Sclose( FileSpace_id );
255 if (NewPoints != OldPoints)
257 hid_t lapl_id = H5P_DEFAULT;
259 F5printf(0,
"PERFORMANCE WARNING: F5Dappend(,%s,,NewSize=%lld,...) modifying dataset to different size, it is %lld currently (%s to %u%%).",
260 name, (
long long)NewPoints, (
long long)OldPoints,
261 (NewPoints<OldPoints)?
"shrink":
"grow", (
int)(100*NewPoints)/OldPoints );
264 H5Ldelete( loc_id,
name, lapl_id );
270 F5printf(41,
"F5Dappend(%lli,%s,...) could not open existing dataset...", loc_id,
name);
271 id = H5Dcreate2(loc_id,
name, type_id, space_id, H5P_DEFAULT, create_plist_id, H5P_DEFAULT) ;
273 F5printf(41,
"F5Dappend(%lli,%s,...) could not create dataset...", loc_id,
name);
278hid_t
F5Dcreate(hid_t loc_id,
const char *
name, hid_t type_id, hid_t space_id, hid_t create_plist_id )
282 id = H5Dcreate2(loc_id,
name, type_id, space_id, H5P_DEFAULT, create_plist_id, H5P_DEFAULT) ;
286 F5printf(10,
"F5Dcreate(%d,%s,...) could not create dataset, dataset already exists, deleting it...", (
int)(loc_id),
name);
287 H5Ldelete( loc_id,
name, H5P_DEFAULT );
288 id = H5Dcreate2(loc_id,
name, type_id, space_id, H5P_DEFAULT, create_plist_id, H5P_DEFAULT);
292 F5printf(0,
"F5Dcreate(%d,%s,...) could not create dataset, not even after deletion...", (
int)(loc_id),
name);
301 retval = H5Gopen2(location,
name, H5P_DEFAULT);
312 retval = H5Gopen2(location,
name, H5P_DEFAULT);
326 retval = H5Dopen2(location,
name, H5P_DEFAULT);
340 retval = H5Dopen2(location,
name, H5P_DEFAULT);
350 H5I_type_t ObjectType = H5Iget_type(obj_id);
360 return H5Fclose(obj_id);
369 return H5Sclose(obj_id);
372 return H5Dclose(obj_id);
375 return H5Aclose(obj_id);
381 printf (
"INTERNAL ERROR F5Xclose(): unknown type %d\n", ObjectType);
394WORD wVersionRequested = MAKEWORD( 2, 2 );
395int err = WSAStartup( wVersionRequested, &wsaData );
402 puts(
"windows sockets error");
418#define NI_MAXHOST 10000
424const char*service =
"6666";
434 if ( strncmp( url,
"hdf5://", 7 ) != 0
436 strncmp( url,
"HDF5://", 7 ) != 0 )
442 strcpy(hostname, url);
443 p = strchr(hostname,
':');
451 command = strchr(p?p:hostname,
'/');
455 commandlen = strlen(command);
460 error = getaddrinfo(hostname, service, NULL, &res);
464 printf(
"CANNOT open HDF5 stream from `%s' %s: "
465 "A temporary failure in name resolution occurred.\n", hostname, service);
469 printf(
"CANNOT open HDF5 stream from `%s' %s: "
470 "An invalid value was provided for the ai_flags member of the hints parameter.\n",
475 printf(
"CANNOT open HDF5 stream from `%s' %s:"
476 " A nonrecoverable failure in name resolution occurred.\n",
485 printf(
"CANNOT open HDF5 stream from `%s' %s: "
486 "The name does not resolve for the supplied parameters "
487 "or the nodename and servname parameters were not provided.\n", hostname, service);
491 printf(
"CANNOT open HDF5 stream from `%s' %s: "
492 "The servname parameter is not supported for the specified "
493 "ai_socktype member of the hints parameter.\n", hostname, service);
499 printf(
"CANNOT open HDF5 stream from `%s' %s: error code %d\n", hostname, service, error);
503 F5printf(10,
"HDF5 stream to `%s' %s: addrinfo ok, proceeding\n", hostname, service);
508 for(r = res; r; r = r->ai_next)
511 sockfd = socket(r->ai_family,
517 printf(
"HDF5 stream: FAILED to open connection\n");
521 F5printf(5,
"F5connect: Created socket for HDF5 stream from `%s':%s...\n", hostname, service );
523 cerror = connect(sockfd, r->ai_addr, r->ai_addrlen);
524 F5printf(5,
"F5connect: Connected to `%s':%s...\n", hostname, service );
531 case WSAECONNREFUSED:
535 printf(
"HDF5 stream to `%s' %s: connection refused.\n", hostname, service);
549 perror(
"CANNOT connect to HDF5 stream");
550 printf(
"HDF5 stream to `%s' %s: error code %d.\n", hostname, service, cerror);
563 puts(
"HDF5 URL: could not open valid connection.");
570 F5printf(1,
"Sending HDF5 Request `%s'\n", command );
572 werr = send(sockfd, command, commandlen, 0);
574 perror(
"Sending HDF5 Request");
575 else if (werr != commandlen)
576 F5printf(1,
"Warning: Only sent %d of %d bytes during HDF5 Request transfer\n", werr, commandlen);
589hid_t
F5open(
const char *filename,
int socket )
592hid_t proplist = H5Pcreate (H5P_FILE_ACCESS);
595H5FD_stream_fapl_t fapl;
596 fapl.increment = 1024*1024;
597 fapl.do_socket_io = 1;
598 fapl.socket = socket;
600 fapl.broadcast_fn = 0;
603 if (H5Pset_fapl_stream ( proplist, &fapl)<0)
605 puts(
"HDF5: Problem in H5Pset_fapl_stream ()!");
607 file_id = H5Fopen(
"/dev/null", H5F_ACC_RDONLY, proplist);
611 puts(
"Problem Receiving HDF5 Stream Data...");
617 return H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
623struct addrinfo hints, *res, *ressave;
626 memset(&hints, 0,
sizeof(
struct addrinfo));
635 hints.ai_flags = AI_PASSIVE;
636 hints.ai_family = AF_INET;
637 hints.ai_socktype = SOCK_STREAM;
638 hints.ai_protocol = IPPROTO_TCP;
640 n = getaddrinfo( NULL, service, &hints, &res);
655 sockfd = socket(res->ai_family,
661 if (bind(sockfd, res->ai_addr, res->ai_addrlen) == 0)
672 freeaddrinfo(ressave);
673 F5printf(1,
"F5listen(): could not open socket\n");
679 struct linger wait_on_close;
680 wait_on_close.l_onoff = 1;
681 wait_on_close.l_linger = 1;
682 setsockopt (sockfd, SOL_SOCKET, SO_LINGER,
683 (
const char*)&wait_on_close,
sizeof (wait_on_close));
698 listen(sockfd, SOMAXCONN);
700 freeaddrinfo(ressave);
#define WSAGetLastError()
hid_t F5Gappend_tree(hid_t loc_id, const char *name)
#define F5printf(verbosity,...)
hid_t F5Dappend(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t create_plist_id)
hid_t F5Gcreate(hid_t loc_id, const char *name, int est_num_entries, int est_name_len)
hid_t F5Gappend_external(hid_t loc_id, const char *name, const char *target_file_name, const char *target_obj_name, const char *prefix)
int F5listen(const char *service)
hid_t F5append(const char *filename)
hid_t F5open(const char *filename, int socket)
void F5closesocket(int socket)
int F5Gexist(hid_t location, const char *name)
hid_t F5Dcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t create_plist_id)
int F5Dexist(hid_t location, const char *name)
int F5connect(const char *url)
hid_t F5Dtry_to_open(hid_t location, const char *name)
hid_t F5Gtry_to_open(hid_t location, const char *name)
herr_t F5Xclose(hid_t obj_id)
hid_t F5Gappend(hid_t loc_id, const char *name)
hid_t F5Gappend_hinted_creation(hid_t loc_id, const char *name, int est_num_entries, int est_name_len)