static inline int ftp_create_data_link(struct network_client *client, const struct network_url *url) { if (client->sockfd < 0) { return network_client_open(client, url, 0); } return 0; }
int ftp_client_create_pasv_link(struct network_client *client_ctrl, struct network_client *client_data) { int ret; struct network_url url;; ret = ftp_client_send_pasv_command(client_ctrl, &url); if (ret < 0) { pr_red_info("ftp_client_send_pasv_command"); return ret; } return network_client_open(client_data, &url, 0); }
int main(int argc, char *argv[]) { int ret; u16 seq; struct network_url url; struct network_client client; struct ping_send_package pkg; struct icmp_header *icmp = &pkg.icmp; struct ping_header *ping = &pkg.ping; assert(argc > 1); url.protocol = "icmp"; url.hostname = argv[1]; url.port = NETWORK_PORT_INVALID; url.pathname = NULL; ret = network_client_open(&client, &url, 0); if (ret < 0) { pr_red_info("network_client_open"); return ret; } cavan_pthread_run(ping_recv_thread, &client); ping->id = getpid(); icmp->type = 8; icmp->code = 0; for (seq = 1; ; seq++) { ssize_t wrlen; ping->seq = seq; pkg.time = clock_gettime_ns_mono(); icmp->checksum = 0; icmp->checksum = mem_checksum16(&pkg, sizeof(pkg)); wrlen = client.send(&client, &pkg, sizeof(pkg)); if (wrlen != sizeof(pkg)) { pr_red_info("client.send"); break; } msleep(500); } network_client_close(&client); return 0; }
int ftp_client_run(struct network_url *url, const char *username, const char *password) { int ret; char buff[1024], *p; ssize_t wrlen, rdlen; struct network_client client; ret = network_client_open(&client, url, 0); if (ret < 0) { pr_red_info("network_client_open"); return ret; } ret = ftp_client_login(&client, username, password); if (ret < 0) { pr_red_info("ftp_client_login"); return ret; } while (1) { while (1) { print("cavan-ftp> "); for (p = buff; (*p = getchar()) != '\n'; p++); if (p > buff) { p = text_copy(p, "\r\n"); break; } } if (text_lhcmp("ls", buff) == 0) { println("list command"); ftp_client_receive_file(&client, url->hostname, 6789); } else { wrlen = client.send(&client, buff, p - buff); if (wrlen < 0) { pr_red_info("inet_send"); ret = wrlen; break; } } rdlen = client.recv(&client, buff, sizeof(buff)); if (rdlen < 0) { pr_red_info("client.recv"); ret = rdlen; break; } buff[rdlen] = 0; println("%s", buff); } network_client_close(&client); return ret; }