xchar *xi_pathname_basename(const xchar *path) { xssize pos; if (path == NULL) { return NULL; } pos = xi_strlen(path) - 1; if (pos < 0) { return (xchar*) path; } while (path[pos] == '/' || path[pos] == '\\') { ((xchar *) path)[pos] = '\0'; pos--; } while (pos >= 0 && path[pos] != '/' && path[pos] != '\\') { pos--; } if (pos > 0) { return (xchar *) &path[pos + 1]; } else { return (xchar *) path; } }
char *copyUtf8(char *string) { char *buff = xi_strcpy(sysMalloc(xi_strlen(string) + 1), string); char *found = findHashedUtf8(buff, TRUE); if(found != buff) sysFree(buff); return found; }
char *slash2dots(char *utf8) { int len = xi_strlen(utf8); char *conv = sysMalloc(len+1); int i; for(i = 0; i <= len; i++) if(utf8[i] == '/') conv[i] = '.'; else conv[i] = utf8[i]; return conv; }
xi_file_re xi_dir_make_force(const xchar *pathname, xint32 perm) { xchar opath[XCFG_PATHNAME_MAX]; xchar* p; xssize len; xi_file_re ret; UNUSED(perm); if (pathname == NULL) { return XI_FILE_RV_ERR_ARGS; } len = xi_strlen(pathname); xi_strncpy(opath, pathname, len); opath[len] = '\0'; if (opath[len - 1] == '/') { opath[len - 1] = '\0'; } for (p = opath; *p; p++) { if (*p == '/') { *p = '\0'; ret = xi_dir_make(opath, perm); if (ret != XI_FILE_RV_OK && ret != XI_FILE_RV_ERR_AE) { return ret; } *p = '/'; } } ret = xi_dir_make(opath, perm); if (ret != XI_FILE_RV_OK && ret != XI_FILE_RV_ERR_AE) { return ret; } return XI_FILE_RV_OK; }
xi_file_re xi_pathname_merge(xchar *pathbuf, xuint32 pblen, xi_pathname_t pathinfo) { xchar buf[XCFG_PATHNAME_MAX]; if (pathbuf == NULL) { return XI_FILE_RV_ERR_ARGS; } if (pathinfo.drive[0] != '\0') { xi_sprintf(buf, "%s:%s/%s", pathinfo.drive, pathinfo.dirname, pathinfo.basename); } else { xi_sprintf(buf, "%s/%s", pathinfo.dirname, pathinfo.basename); } if (xi_strlen(buf) > pblen) { return XI_FILE_RV_ERR_OVER; } xi_strcpy(pathbuf, buf); return XI_FILE_RV_OK; }
static xvoid * tc_client_thread(xvoid *args) { xint32 t = 1; xchar *tcname = "xi_socket.h-clt"; xssize ret; xchar buf[1024]; xint32 clt_sock = -1; xi_sock_addr_t toaddr = { XI_SOCK_FAMILY_INET, XI_SOCK_TYPE_STREAM, XI_SOCK_PROTO_IP, { '\0' }, 9876 }; UNUSED(args); log_print(XDLOG, "Client Thread - started >>>>>>>>>>>>>>>\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_open ############\n", tcname, t++); clt_sock = xi_socket_open(toaddr.family, toaddr.type, toaddr.proto); if (clt_sock < 0) { log_print(XDLOG, " - result : failed!!!\n\n"); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (socket=%d)\n\n", clt_sock); log_print(XDLOG, " (%s:%02d) xi_socket_connect #########\n", tcname, t++); xi_strcpy(toaddr.host, "127.0.0.1"); ret = xi_socket_connect(clt_sock, toaddr); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (svr=%s)\n\n", toaddr.host); log_print(XDLOG, " (%s:%02d) xi_socket_send #############\n", tcname, t++); xi_strcpy(buf, "Hello, SVR!!"); ret = xi_socket_send(clt_sock, buf, xi_strlen(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (wbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_socket_recv #############\n", tcname, t++); xi_mem_set(buf, 0, sizeof(buf)); ret = xi_socket_recv(clt_sock, buf, sizeof(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (rbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_file_write #############\n", tcname, t++); xi_strcpy(buf, "client file write!"); ret = xi_file_write(clt_sock, buf, xi_strlen(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (wbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_file_read #############\n", tcname, t++); xi_mem_set(buf, 0, sizeof(buf)); ret = xi_file_read(clt_sock, buf, sizeof(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (rbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_socket_shutdown ########\n", tcname, t++); ret = xi_socket_shutdown(clt_sock, XI_SOCK_SHUTDOWN_RDWR); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_close ###########\n", tcname, t++); ret = xi_socket_close(clt_sock); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n"); log_print(XDLOG, "Client Thread - ended <<<<<<<<<<<<<<<<<\n\n"); return NULL; }
static xvoid * tc_server_thread(xvoid *args) { xint32 t = 1; xchar *tcname = "xi_socket.h-svr"; xssize ret; xchar buf[1024]; xint32 svr_sock = -1; xint32 client = -1; xi_sock_addr_t lsnaddr = { XI_SOCK_FAMILY_INET, XI_SOCK_TYPE_STREAM, XI_SOCK_PROTO_IP, { '\0' }, 9876 }; xi_sock_addr_t laddr; xi_sock_addr_t fromaddr; UNUSED(args); log_print(XDLOG, "Server Thread - started >>>>>>>>>>>>>>>\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_open ############\n", tcname, t++); svr_sock = xi_socket_open(lsnaddr.family, lsnaddr.type, lsnaddr.proto); if (svr_sock < 0) { log_print(XDLOG, " - result : failed!!!\n\n"); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (socket=%d)\n\n", svr_sock); log_print(XDLOG, " (%s:%02d) xi_socket_opt_set #########\n", tcname, t++); ret = xi_socket_opt_set(svr_sock, XI_SOCK_OPT_REUSEADDR, TRUE); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_bind ############\n", tcname, t++); xi_strcpy(lsnaddr.host, "0.0.0.0"); ret = xi_socket_bind(svr_sock, lsnaddr); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_listen ##########\n", tcname, t++); ret = xi_socket_listen(svr_sock, 10); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n"); log_print(XDLOG, " (%s:%02d) xi_socket_get_local #######\n", tcname, t++); ret = xi_socket_get_local(svr_sock, &laddr); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (addr=%s,port=%d)\n\n", laddr.host, laddr.port); log_print(XDLOG, " (%s:%02d) xi_socket_accept ##########\n", tcname, t++); client = xi_socket_accept(svr_sock, &fromaddr); if (client < 0) { log_print(XDLOG, " - result : accept failed!!!\n\n"); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (client=%d, from=%s)\n\n", client, fromaddr.host); log_print(XDLOG, " (%s:%02d) xi_socket_recv ############\n", tcname, t++); xi_mem_set(buf, 0, sizeof(buf)); ret = xi_socket_recv(client, buf, sizeof(buf)); if (ret < 0) { log_print(XDLOG, " - result : recv failed!!!\n\n"); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (rbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_socket_send ############\n", tcname, t++); xi_strcpy(buf, "connected!"); ret = xi_socket_send(client, buf, xi_strlen(buf)); if (ret < 0) { log_print(XDLOG, " - result : send failed!!!\n\n"); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (wbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_file_read #############\n", tcname, t++); xi_mem_set(buf, 0, sizeof(buf)); ret = xi_file_read(client, buf, sizeof(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (rbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) xi_file_write #############\n", tcname, t++); xi_strcpy(buf, "server file write!"); ret = xi_file_write(client, buf, xi_strlen(buf)); if (ret < 0) { log_print(XDLOG, " - result : failed!!! (ret=%d)\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass. (wbytes=%d/msg=%s)\n\n", ret, buf); log_print(XDLOG, " (%s:%02d) wait for client-end #######\n", tcname, t++); xi_thread_sleep(2000); log_print(XDLOG, " (%s:%02d) xi_socket_close ###########\n", tcname, t++); ret = xi_socket_close(client); if (ret != XI_SOCK_RV_OK) { log_print(XDLOG, " - result : client close err=%d!!!\n\n", ret); TC_EXIT_ERROR; } ret = xi_socket_close(svr_sock); if (ret != XI_SOCK_RV_OK) { log_print(XDLOG, " - result : svr_sock close err=%d!!!\n\n", ret); TC_EXIT_ERROR; } log_print(XDLOG, " - result : pass.\n\n", ret); log_print(XDLOG, " (%s:%02d) signal to main thread #####\n", tcname, t++); _g_trun = FALSE; log_print(XDLOG, "Server Thread - ended <<<<<<<<<<<<<<<<<\n\n"); return NULL; }