Changeset 367:7a3e51056fb3
- Timestamp:
- 1998-08-22 06:35:23 (10 years ago)
- Branch:
- mutt-0-94
- Files:
-
- 1 added
- 11 modified
-
BUGS (modified) (1 diff)
-
browser.c (modified) (4 diffs)
-
buffy.c (modified) (3 diffs)
-
configure (modified) (1 diff)
-
configure.in (modified) (1 diff)
-
curs_lib.c (modified) (2 diffs)
-
imap.c (modified) (31 diffs)
-
imap.h (modified) (1 diff)
-
mailbox.h (modified) (1 diff)
-
mutt.h (modified) (2 diffs)
-
mx.c (modified) (1 diff)
-
socket.c (added)
Legend:
- Unmodified
- Added
- Removed
-
BUGS
r364 r367 39 39 matching nametemplates exist. 40 40 41 - mutt_gen_msgid() should _always_ rely on the real FQDN, 42 regardless of the hidden_domain feature. -
browser.c
r365 r367 157 157 struct passwd *pw; 158 158 struct group *gr; 159 159 160 160 switch (op) 161 161 { 162 162 case 'd': 163 tnow = time (NULL); 164 t_fmt = tnow - folder->f->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; 165 strftime (date, sizeof (date), t_fmt, localtime (&folder->f->st_mtime)); 166 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 167 snprintf (dest, destlen, tmp, date); 163 if (folder->f != NULL) 164 { 165 tnow = time (NULL); 166 t_fmt = tnow - folder->f->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y"; 167 strftime (date, sizeof (date), t_fmt, localtime (&folder->f->st_mtime)); 168 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 169 snprintf (dest, destlen, tmp, date); 170 } 171 else 172 { 173 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 174 snprintf (dest, destlen, tmp, ""); 175 } 168 176 break; 169 177 case 'f': 170 178 strncpy (fn, folder->name, sizeof(fn) - 1); 171 strcat (fn, S_ISLNK (folder->f->st_mode) ? "@" : 172 (S_ISDIR (folder->f->st_mode) ? "/" : 173 ((folder->f->st_mode & S_IXUSR) != 0 ? "*" : ""))); 179 if (folder->f != NULL) 180 { 181 strcat (fn, S_ISLNK (folder->f->st_mode) ? "@" : 182 (S_ISDIR (folder->f->st_mode) ? "/" : 183 ((folder->f->st_mode & S_IXUSR) != 0 ? "*" : ""))); 184 } 174 185 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 175 186 snprintf (dest, destlen, tmp, fn); 176 187 break; 177 188 case 'F': 178 sprintf (permission, "%c%c%c%c%c%c%c%c%c%c", 179 S_ISDIR(folder->f->st_mode) ? 'd' : (S_ISLNK(folder->f->st_mode) ? 'l' : '-'), 180 (folder->f->st_mode & S_IRUSR) != 0 ? 'r': '-', 181 (folder->f->st_mode & S_IWUSR) != 0 ? 'w' : '-', 182 (folder->f->st_mode & S_ISUID) != 0 ? 's' : (folder->f->st_mode & S_IXUSR) != 0 ? 'x': '-', 183 (folder->f->st_mode & S_IRGRP) != 0 ? 'r' : '-', 184 (folder->f->st_mode & S_IWGRP) != 0 ? 'w' : '-', 185 (folder->f->st_mode & S_ISGID) != 0 ? 's' : (folder->f->st_mode & S_IXGRP) != 0 ? 'x': '-', 186 (folder->f->st_mode & S_IROTH) != 0 ? 'r' : '-', 187 (folder->f->st_mode & S_IWOTH) != 0 ? 'w' : '-', 188 (folder->f->st_mode & S_ISVTX) != 0 ? 't' : (folder->f->st_mode & S_IXOTH) != 0 ? 'x': '-'); 189 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 190 snprintf (dest, destlen, tmp, permission); 189 if (folder->f != NULL) 190 { 191 sprintf (permission, "%c%c%c%c%c%c%c%c%c%c", 192 S_ISDIR(folder->f->st_mode) ? 'd' : (S_ISLNK(folder->f->st_mode) ? 'l' : '-'), 193 (folder->f->st_mode & S_IRUSR) != 0 ? 'r': '-', 194 (folder->f->st_mode & S_IWUSR) != 0 ? 'w' : '-', 195 (folder->f->st_mode & S_ISUID) != 0 ? 's' : (folder->f->st_mode & S_IXUSR) != 0 ? 'x': '-', 196 (folder->f->st_mode & S_IRGRP) != 0 ? 'r' : '-', 197 (folder->f->st_mode & S_IWGRP) != 0 ? 'w' : '-', 198 (folder->f->st_mode & S_ISGID) != 0 ? 's' : (folder->f->st_mode & S_IXGRP) != 0 ? 'x': '-', 199 (folder->f->st_mode & S_IROTH) != 0 ? 'r' : '-', 200 (folder->f->st_mode & S_IWOTH) != 0 ? 'w' : '-', 201 (folder->f->st_mode & S_ISVTX) != 0 ? 't' : (folder->f->st_mode & S_IXOTH) != 0 ? 'x': '-'); 202 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 203 snprintf (dest, destlen, tmp, permission); 204 } 205 else 206 { 207 #ifdef USE_IMAP 208 if (strchr(folder->name, '{')) 209 { 210 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 211 snprintf (dest, destlen, tmp, "IMAP"); 212 } 213 #endif 214 } 191 215 break; 192 216 case 'g': 193 if ((gr = getgrgid (folder->f->st_gid))) 217 if (folder->f != NULL) 218 { 219 if ((gr = getgrgid (folder->f->st_gid))) 220 { 221 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 222 snprintf (dest, destlen, tmp, gr->gr_name); 223 } 224 else 225 { 226 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 227 snprintf (dest, destlen, tmp, folder->f->st_gid); 228 } 229 } 230 else 194 231 { 195 232 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 196 snprintf (dest, destlen, tmp, gr->gr_name); 233 snprintf (dest, destlen, tmp, ""); 234 } 235 break; 236 case 'l': 237 if (folder->f != NULL) 238 { 239 snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 240 snprintf (dest, destlen, tmp, folder->f->st_nlink); 197 241 } 198 242 else 199 243 { 200 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 201 snprintf (dest, destlen, tmp, folder->f->st_gid); 202 } 203 break; 204 case 'l': 205 snprintf (tmp, sizeof (tmp), "%%%sd", fmt); 206 snprintf (dest, destlen, tmp, folder->f->st_nlink); 244 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 245 snprintf (dest, destlen, tmp, ""); 246 } 207 247 break; 208 248 case 'N': … … 211 251 break; 212 252 case 's': 213 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 214 snprintf (dest, destlen, tmp, (long) folder->f->st_size); 253 if (folder->f != NULL) 254 { 255 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 256 snprintf (dest, destlen, tmp, (long) folder->f->st_size); 257 } 258 else 259 { 260 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 261 snprintf (dest, destlen, tmp, ""); 262 } 215 263 break; 216 264 case 'u': 217 if ((pw = getpwuid (folder->f->st_uid))) 265 if (folder->f != NULL) 266 { 267 if ((pw = getpwuid (folder->f->st_uid))) 268 { 269 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 270 snprintf (dest, destlen, tmp, pw->pw_name); 271 } 272 else 273 { 274 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 275 snprintf (dest, destlen, tmp, folder->f->st_uid); 276 } 277 } 278 else 218 279 { 219 280 snprintf (tmp, sizeof (tmp), "%%%ss", fmt); 220 snprintf (dest, destlen, tmp, pw->pw_name); 221 } 222 else 223 { 224 snprintf (tmp, sizeof (tmp), "%%%sld", fmt); 225 snprintf (dest, destlen, tmp, folder->f->st_uid); 281 snprintf (dest, destlen, tmp, ""); 226 282 } 227 283 break; … … 251 307 } 252 308 309 if (s != NULL) 310 { 253 311 (state->entry)[state->entrylen].mode = s->st_mode; 254 312 (state->entry)[state->entrylen].mtime = s->st_mtime; 255 313 (state->entry)[state->entrylen].size = s->st_size; 314 } 256 315 (state->entry)[state->entrylen].name = safe_strdup (name); 257 316 (state->entry)[state->entrylen].desc = safe_strdup (buffer); … … 342 401 do 343 402 { 403 #ifdef USE_IMAP 404 if (tmp->path[0] == '{') 405 { 406 add_folder (menu, state, tmp->path, NULL, tmp->new); 407 continue; 408 } 409 #endif 344 410 if (lstat (tmp->path, &s) == -1) 345 411 continue; -
buffy.c
r101 r367 21 21 #include "mx.h" 22 22 #include "mailbox.h" 23 #ifdef USE_IMAP 24 #include "imap.h" 25 #endif 23 26 24 27 #include <string.h> … … 243 246 tmp->new = 0; 244 247 248 #ifdef USE_IMAP 249 if ((tmp->magic == M_IMAP) || mx_is_imap (tmp->path)) 250 { 251 tmp->magic = M_IMAP; 252 } 253 else 254 #endif 245 255 if (stat (tmp->path, &sb) != 0 || 246 256 (!tmp->magic && (tmp->magic = mx_get_magic (tmp->path)) <= 0)) … … 317 327 } 318 328 break; 329 330 #ifdef USE_IMAP 331 case M_IMAP: 332 if (imap_buffy_check (tmp->path) > 0) 333 { 334 BuffyCount++; 335 tmp->new = 1; 336 } 337 break; 338 #endif 319 339 } 320 340 } -
configure
r323 r367 2940 2940 fi 2941 2941 2942 LIBOBJS="$LIBOBJS imap.o "2942 LIBOBJS="$LIBOBJS imap.o socket.o" 2943 2943 2944 2944 fi -
configure.in
r323 r367 393 393 AC_CHECK_LIB(socket, socket) 394 394 AC_CHECK_LIB(nsl, gethostbyname) 395 LIBOBJS="$LIBOBJS imap.o "395 LIBOBJS="$LIBOBJS imap.o socket.o" 396 396 ]) 397 397 -
curs_lib.c
r348 r367 179 179 va_end (ap); 180 180 181 dprint (1, (debugfile, "%s\n", Errorbuf)); 181 182 Errorbuf[ (COLS < sizeof (Errorbuf) ? COLS : sizeof (Errorbuf)) - 2 ] = 0; 182 183 … … 233 234 char *p = strerror (errno); 234 235 236 dprint (1, (debugfile, "%s: %s (errno = %d)\n", s, 237 p ? p : "unknown error", errno)); 235 238 mutt_error ("%s: %s (errno = %d)", s, p ? p : "unknown error", errno); 236 239 } -
imap.c
r346 r367 22 22 #include "mailbox.h" 23 23 #include "globals.h" 24 #include "mutt_socket.h" 24 25 25 26 #include <unistd.h> … … 48 49 IMAP_EXPUNGE, 49 50 IMAP_BYE, 50 IMAP_OK_FAIL, 51 IMAP_OPEN_NEW 51 IMAP_OK_FAIL 52 52 }; 53 53 54 54 typedef struct 55 55 { 56 char *server; 57 int uses; 58 int fd; 59 char inbuf[LONG_STRING]; 60 int bufpos; 61 int available; 62 } CONNECTION; 63 64 typedef struct 65 { 66 int index; 56 unsigned int index; 67 57 char *path; 68 58 } IMAP_CACHE; … … 71 61 { 72 62 short status; 73 unsigned short sequence;74 63 unsigned short newMailCount; 75 64 char *mailbox; … … 81 70 #define CTX_DATA ((IMAP_DATA *) ctx->data) 82 71 83 static CONNECTION *Connections = NULL;84 static int NumConnections = 0;85 86 72 /* Linked list to hold header information while downloading message 87 73 * headers … … 101 87 } IMAP_HEADER_INFO; 102 88 103 /* simple read buffering to speed things up. */ 104 static int imap_readchar (CONNECTION *conn, char *c) 105 { 106 if (conn->bufpos >= conn->available) 107 { 108 conn->available = read (conn->fd, conn->inbuf, 109 sizeof(LONG_STRING) > SSIZE_MAX ? SSIZE_MAX : sizeof(LONG_STRING)); 110 conn->bufpos = 0; 111 if (conn->available <= 0) 112 return conn->available; /* returns 0 for EOF or -1 for other error */ 113 } 114 *c = conn->inbuf[conn->bufpos]; 115 conn->bufpos++; 116 return 1; 117 } 118 119 static int imap_read_line (char *buf, size_t buflen, CONNECTION *conn) 120 { 121 char ch; 122 int i; 123 124 for (i = 0; i < buflen; i++) 125 { 126 if (imap_readchar (conn, &ch) != 1) 127 return (-1); 128 if (ch == '\n') 129 break; 130 buf[i] = ch; 131 } 132 buf[i-1] = 0; 133 return (i + 1); 134 } 135 136 static int imap_read_line_d (char *buf, size_t buflen, CONNECTION *conn) 137 { 138 int r = imap_read_line (buf, buflen, conn); 139 dprint (1,(debugfile,"imap_read_line_d():%s\n", buf)); 140 return r; 141 } 142 143 static void imap_make_sequence (char *buf, size_t buflen, CONTEXT *ctx) 144 { 145 snprintf (buf, buflen, "a%04d", CTX_DATA->sequence++); 146 } 147 148 static int imap_write (CONNECTION *conn, const char *buf) 149 { 150 dprint (1,(debugfile,"imap_write():%s", buf)); 151 return (write (conn->fd, buf, strlen (buf))); 152 } 89 90 static void imap_make_sequence (char *buf, size_t buflen) 91 { 92 static int sequence = 0; 93 94 snprintf (buf, buflen, "a%04d", sequence++); 95 } 96 153 97 154 98 static void imap_error (const char *where, const char *msg) 155 99 { 156 100 mutt_error ("imap_error(): unexpected response in %s: %s\n", where, msg); 157 }158 159 static CONNECTION *imap_select_connection (char *host, int flags)160 {161 int x;162 163 if (flags != IMAP_OPEN_NEW)164 {165 for (x = 0; x < NumConnections; x++)166 {167 if (!strcmp (host, Connections[x].server))168 return &Connections[x];169 }170 }171 if (NumConnections == 0)172 {173 NumConnections = 1;174 Connections = (CONNECTION *) safe_malloc (sizeof (CONNECTION));175 }176 else177 {178 NumConnections++;179 safe_realloc ((void *)&Connections, sizeof (CONNECTION) * NumConnections);180 }181 Connections[NumConnections - 1].bufpos = 0;182 Connections[NumConnections - 1].available = 0;183 Connections[NumConnections - 1].uses = 0;184 Connections[NumConnections - 1].server = safe_strdup (host);185 186 return &Connections[NumConnections - 1];187 101 } 188 102 … … 353 267 for (pos = 0; pos < bytes; ) 354 268 { 355 len = imap_read_line (buf, sizeof (buf), conn);269 len = mutt_socket_read_line (buf, sizeof (buf), conn); 356 270 if (len < 0) 357 271 return (-1); … … 485 399 if (msgno + 1 > fetchlast) 486 400 { 487 imap_make_sequence (seq, sizeof (seq) , ctx);401 imap_make_sequence (seq, sizeof (seq)); 488 402 /* 489 403 * Make one request for everything. This makes fetching headers an … … 494 408 */ 495 409 snprintf (buf, sizeof (buf), "%s FETCH %d:%d (FLAGS INTERNALDATE RFC822.SIZE BODY.PEEK[HEADER.FIELDS (DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE IN-REPLY-TO REPLY-TO)])\r\n", seq, msgno + 1, msgend + 1); 496 imap_write (CTX_DATA->conn, buf);410 mutt_socket_write (CTX_DATA->conn, buf); 497 411 fetchlast = msgend + 1; 498 412 } … … 500 414 do 501 415 { 502 if ( imap_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0)416 if (mutt_socket_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0) 503 417 { 504 418 return (-1); … … 540 454 541 455 imap_read_bytes (fp, CTX_DATA->conn, bytes); 542 if ( imap_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0)456 if (mutt_socket_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0) 543 457 { 544 458 return (-1); … … 614 528 int count; 615 529 616 imap_write (CTX_DATA->conn, cmd);530 mutt_socket_write (CTX_DATA->conn, cmd); 617 531 618 532 do 619 533 { 620 if ( imap_read_line_d (buf, buflen, CTX_DATA->conn) < 0)534 if (mutt_socket_read_line_d (buf, buflen, CTX_DATA->conn) < 0) 621 535 return (-1); 622 536 … … 658 572 } 659 573 574 return 0; 575 } 576 577 static int imap_parse_path (char *path, char *host, size_t hlen, char **mbox) 578 { 579 int n; 580 char *pc; 581 582 pc = path; 583 if (*pc != '{') 584 return (-1); 585 pc++; 586 n = 0; 587 while (*pc && *pc != '}' && (n < hlen-1)) 588 host[n++] = *pc++; 589 host[n] = 0; 590 if (!*pc) 591 return (-1); 592 pc++; 593 594 *mbox = pc; 660 595 return 0; 661 596 } … … 700 635 } 701 636 702 if ( imap_read_line_d (buf, sizeof (buf), conn) < 0)637 if (mutt_socket_read_line_d (buf, sizeof (buf), conn) < 0) 703 638 { 704 639 close (conn->fd); … … 735 670 736 671 mutt_message ("Logging in..."); 737 /* sequence numbers are currently context dependent, so just make one 738 * up for this first access to the server */ 739 strcpy (seq, "l0000"); 672 imap_make_sequence (seq, sizeof (seq)); 740 673 snprintf (buf, sizeof (buf), "%s LOGIN %s %s\r\n", seq, user, pass); 741 674 if (imap_exec (buf, sizeof (buf), ctx, seq, buf, 0) != 0) … … 767 700 char host[SHORT_STRING]; 768 701 char seq[16]; 702 char *pc = NULL; 769 703 int count = 0; 770 704 int n; 771 char *pc; 772 773 pc = ctx->path; 774 if (*pc != '{') 775 return (-1); 776 pc++; 777 n = 0; 778 while (*pc && *pc != '}') 779 host[n++] = *pc++; 780 host[n] = 0; 781 if (!*pc) 782 return (-1); 783 pc++; 705 706 if (imap_parse_path (ctx->path, host, sizeof (host), &pc)) 707 return (-1); 784 708 785 709 /* create IMAP-specific state struct */ … … 789 713 CTX_DATA->mailbox = safe_strdup (pc); 790 714 791 conn = imap_select_connection (host, IMAP_OPEN_NEW);715 conn = mutt_socket_select_connection (host, IMAP_PORT, M_NEW_SOCKET); 792 716 CTX_DATA->conn = conn; 793 717 … … 798 722 799 723 mutt_message ("Selecting %s...", CTX_DATA->mailbox); 800 imap_make_sequence (seq, sizeof (seq) , ctx);724 imap_make_sequence (seq, sizeof (seq)); 801 725 snprintf (bufout, sizeof (bufout), "%s SELECT %s\r\n", seq, CTX_DATA->mailbox); 802 imap_write (CTX_DATA->conn, bufout);726 mutt_socket_write (CTX_DATA->conn, bufout); 803 727 804 728 do 805 729 { 806 if ( imap_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0)730 if (mutt_socket_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0) 807 731 break; 808 732 … … 843 767 char buf[LONG_STRING]; 844 768 845 imap_make_sequence (seq, sizeof (seq) , ctx);769 imap_make_sequence (seq, sizeof (seq)); 846 770 snprintf (buf, sizeof (buf), "%s CREATE %s\r\n", seq, CTX_DATA->mailbox); 847 771 … … 860 784 char buf[LONG_STRING]; 861 785 char seq[16]; 862 int n;863 786 char *pc; 864 787 865 pc = ctx->path; 866 if (*pc != '{') 867 return (-1); 868 pc++; 869 n = 0; 870 while (*pc && *pc != '}') 871 host[n++] = *pc++; 872 host[n] = 0; 873 if (!*pc) 874 return (-1); 875 pc++; 788 if (imap_parse_path (ctx->path, host, sizeof (host), &pc)) 789 return (-1); 876 790 877 791 /* create IMAP-specific state struct */ … … 882 796 CTX_DATA->mailbox = pc; 883 797 884 conn = imap_select_connection (host, 0);798 conn = mutt_socket_select_connection (host, IMAP_PORT, 0); 885 799 CTX_DATA->conn = conn; 886 800 … … 892 806 /* check mailbox existance */ 893 807 894 imap_make_sequence (seq, sizeof (seq) , ctx);808 imap_make_sequence (seq, sizeof (seq)); 895 809 snprintf (buf, sizeof (buf), "%s STATUS %s (UIDVALIDITY)\r\n", seq, 896 810 CTX_DATA->mailbox); … … 955 869 } 956 870 957 imap_make_sequence (seq, sizeof (seq) , ctx);871 imap_make_sequence (seq, sizeof (seq)); 958 872 snprintf (buf, sizeof (buf), "%s FETCH %d RFC822\r\n", seq, 959 873 ctx->hdrs[msgno]->index + 1); 960 imap_write (CTX_DATA->conn, buf);874 mutt_socket_write (CTX_DATA->conn, buf); 961 875 do 962 876 { 963 if ( imap_read_line (buf, sizeof (buf), CTX_DATA->conn) < 0)877 if (mutt_socket_read_line (buf, sizeof (buf), CTX_DATA->conn) < 0) 964 878 { 965 879 return (-1); … … 986 900 for (pos = 0; pos < bytes; ) 987 901 { 988 len = imap_read_line (buf, sizeof (buf), CTX_DATA->conn);902 len = mutt_socket_read_line (buf, sizeof (buf), CTX_DATA->conn); 989 903 if (len < 0) 990 904 return (-1); … … 1039 953 1040 954 mutt_message ("Sending APPEND command ..."); 1041 imap_make_sequence (seq, sizeof (seq) , ctx);955 imap_make_sequence (seq, sizeof (seq)); 1042 956 snprintf (buf, sizeof (buf), "%s APPEND %s {%d}\r\n", seq, 1043 957 CTX_DATA->mailbox, s.st_size); 1044 958 1045 imap_write (CTX_DATA->conn, buf);959 mutt_socket_write (CTX_DATA->conn, buf); 1046 960 1047 961 do 1048 962 { 1049 if ( imap_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0)963 if (mutt_socket_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0) 1050 964 { 1051 965 fclose (fp); … … 1079 993 while (fgets (buf, sizeof (buf), fp) != NULL) 1080 994 { 1081 imap_write (CTX_DATA->conn, buf);1082 } 1083 imap_write (CTX_DATA->conn, "\r\n");995 mutt_socket_write (CTX_DATA->conn, buf); 996 } 997 mutt_socket_write (CTX_DATA->conn, "\r\n"); 1084 998 fclose (fp); 1085 999 1086 1000 do 1087 1001 { 1088 if ( imap_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0)1002 if (mutt_socket_read_line_d (buf, sizeof (buf), CTX_DATA->conn) < 0) 1089
