/* send control file */ void sendctrl(int printerfd) { char cntrlstrbuf[256]; int strlength, cntrlen; sprintf(cntrlstrbuf, "H%s\nP%s\n%cdfA%3.3d%s\n", hostname, username, filetype, seqno, hostname); cntrlen = strlen(cntrlstrbuf); sprintf(strbuf, "%c%d cfA%3.3d%s\n", '\2', cntrlen, seqno, hostname); strlength = strlen(strbuf); if (write(printerfd, strbuf, strlength) != strlength) { fprintf(stderr, "write(printer) error\n"); exit(1); } getack(printerfd, 3); if (write(printerfd, cntrlstrbuf, cntrlen) != cntrlen) { fprintf(stderr, "write(printer) error\n"); exit(1); } if (write(printerfd, "\0", 1) != 1) { fprintf(stderr, "write(printer) error\n"); exit(1); } getack(printerfd, 4); }
int main(int argc, char* argv[]) { process_arg(argc,argv); tcpudp_fd=open_socket(); assert(tcpudp_fd>0); if(server) server_accept(NULL); tun_fd=tun_alloc(tun_name,IFF_TAP); assert(tun_fd>0); get_macaddr(); write_n(tcpudp_fd,tun_mac,6); getack(); if(pthread_create(&pt_read_from_if,NULL,read_from_if,NULL)!=0){ perror("pthread_create"); exit(-1); } if(pthread_create(&pt_read_from_sock,NULL,read_from_sock,NULL)!=0){ perror("pthread_create"); exit(-1); } printf("engin started, main() going to sleep\n"); pthread_join(pt_read_from_if,NULL); pthread_join(pt_read_from_sock,NULL); return 0; }
/* send data file */ void senddata(int inputfd, int printerfd, long size) { int strlength; sprintf(strbuf, "%c%ld dfA%3.3d%s\n", '\3', size, seqno, hostname); strlength = strlen(strbuf); if (write(printerfd, strbuf, strlength) != strlength) { fprintf(stderr, "write(printer) error\n"); exit(1); } getack(printerfd, 5); if (!copyfile(inputfd, printerfd, size)) { fprintf(stderr, "failed to send file to printer\n"); exit(1); } if (write(printerfd, "\0", 1) != 1) { fprintf(stderr, "write(printer) error\n"); exit(1); } fprintf(stderr, "%ld bytes sent, status: waiting for end of job\n", size); getack(printerfd, 6); }
void sendjob(int inputfd, int printerfd) { struct stat statbuf; int strlength; if (fstat(inputfd, &statbuf) < 0) { fprintf(stderr, "fstat(%s) failed\n", inputname); exit(1); } sprintf(strbuf, "%c%s\n", '\2', printername); strlength = strlen(strbuf); if (write(printerfd, strbuf, strlength) != strlength) { fprintf(stderr, "write(printer) error\n"); exit(1); } getack(printerfd, 2); debug("send data\n"); senddata(inputfd, printerfd, statbuf.st_size); debug("send control info\n"); sendctrl(printerfd); fprintf(stderr, "%ld bytes sent, status: end of job\n", (long)statbuf.st_size); }