- write(fd, out, outpos-out);
- if (debug)
- fprintf(stderr, "LAN < %s\n", out);
+
+ /* Queue packet until first respone to 'K' is received */
+ if (wait_for_h && buf[0] != 'H') {
+ struct queued_rx **rxp = &qrx;
+
+ while (*rxp)
+ rxp = &((*rxp)->next);
+
+ *rxp = malloc(sizeof(struct queued_rx));
+ if (!*rxp) {
+ perror("malloc");
+ return 0;
+ }
+
+ memset(*rxp, 0, sizeof(struct queued_rx));
+ (*rxp)->len = outpos-out;
+ (*rxp)->rx = malloc((*rxp)->len);
+ if (!(*rxp)->rx) {
+ perror("malloc");
+ return 0;
+ }
+ memset((*rxp)->rx, 0, (*rxp)->len);
+ memcpy((*rxp)->rx, out, (*rxp)->len);
+
+ return 1;
+ }
+
+ if (verbose) {
+ int i;
+
+ print_timestamp(stdout);
+ printf("LAN < ");
+ for (i = 0; i < outpos-out-2; i++)
+ printf("%c", out[i]);
+ printf("\n");
+ }
+
+ w = write(fd, out, outpos-out);
+ if (w <= 0) {
+ perror("write");
+ return 0;
+ }
+
+ /* Send all queued packets */
+ if (wait_for_h) {
+ struct queued_rx *curr_rx = qrx;
+ struct queued_rx *last_rx;
+
+ while (curr_rx) {
+ if (verbose) {
+ int i;
+
+ print_timestamp(stdout);
+ printf("LAN < ");
+ for (i = 0; i < curr_rx->len-2; i++)
+ printf("%c", curr_rx->rx[i]);
+ printf("\n");
+ }
+
+ w = write(fd, curr_rx->rx, curr_rx->len);
+ if (w <= 0) {
+ perror("write");
+ }
+ last_rx = curr_rx;
+ curr_rx = curr_rx->next;
+
+ free(last_rx->rx);
+ free(last_rx);
+ }
+
+ qrx = NULL;
+
+ wait_for_h = 0;
+ }
+
+ return 1;