2 // $Id: alget_write.c,v 1.2 2007/11/01 06:11:01 sendan Exp $
12 // int alget_write(int, FILE *, int, char, int, int);
15 // FPから一行ずつ読み出したデータをネゴしながら一定量小分けでsendする関数
16 // mode 1 client -> server でデータを送る場合、最後はserverから受け取って終了 400
17 // mode 0 server -> client の場合、自分からの送信を最後に終了 300
19 int alget_write(int sock_fd, FILE * fp, int interval, char delim, int file_len, int mode)
28 swap = (char *)calloc(BUF_DEFLEN, sizeof(char));
29 data = (char *)calloc(BUF_DEFLEN, sizeof(char));
37 swap = safe_fpcat(fp, swap, &ch, BUF_MAX); // file から一行swapに読む
38 swap = safe_strncat(swap, "\n", BUF_MAX); // 最後に改行追加
39 data = safe_strncat(data, swap, BUF_MAX); // data の後ろにつなぐ
40 if( file_len < (int)strlen(data) || ch < 0){ // 4K越えるか、読めない場合
45 swap_mem(data, '\n', (char)delim); // '\n'を'0x05'に置き換え
46 counts = mem_count(data, (char)delim); // 最後に0x05がある位置
47 data[counts] = '\n'; // 最後の0x05を改行に
50 if(1 < (int)strlen(data)){ // data が1以上なのでdata送信
51 stat = socket_send(sock_fd, data, interval);
54 else if(ch < 0){ // data 1以下なので終了送信
56 stat = socket_send(sock_fd, "400OK: stop send data\n", interval);
57 swap = select_fdcat(sock_fd, swap, &stat, BUF_MAX, interval);
60 stat = socket_send(sock_fd, "400OK: stop send data\n", interval);
66 swap = select_fdcat(sock_fd, swap, &stat, BUF_MAX, interval);
67 if(stat < 0 || 0 != memcmp(swap, "MORE", 4)){
68 stat = socket_send(sock_fd, "500 NG file_send2(): not stat.\n", interval);