DeleteHash(&((*sessions_to_kill)->hash_prefs));
DeleteHash(&((*sessions_to_kill)->IconBarSettings));
DeleteHash(&((*sessions_to_kill)->ServCfg));
+ FreeStrBuf(&((*sessions_to_kill)->ReadBuf));
FreeStrBuf(&((*sessions_to_kill)->UrlFragment1));
FreeStrBuf(&((*sessions_to_kill)->UrlFragment2));
FreeStrBuf(&((*sessions_to_kill)->UrlFragment3));
return rc;
}
+int StrBuf_ServGetlnBuffered(StrBuf *buf)
+{
+ wcsession *WCC = WC;
+ const char *ErrStr;
+ int rc;
+
+ rc = StrBufTCP_read_buffered_line(buf,
+ WCC->ReadBuf,
+ &WCC->serv_sock,
+ 5, 1,
+ &ErrStr);
+ if (rc < 0)
+ {
+ lprintf(1, "Server connection broken: %s\n",
+ ErrStr);
+ wc_backtrace();
+ WCC->serv_sock = (-1);
+ WCC->connected = 0;
+ WCC->logged_in = 0;
+ }
+ return rc;
+}
+
int StrBuf_ServGetBLOB(StrBuf *buf, long BlobSize)
{
const char *Err;
* connection now.
*/
if (!WCC->connected) {
+ WCC->ReadBuf = NewStrBuf();
if (!strcasecmp(ctdlhost, "uds")) {
/* unix domain socket */
snprintf(buf, SIZ, "%s/citadel.socket", ctdlport);
/* Session local Members */
int http_sock; /**< HTTP server socket */
int serv_sock; /**< Client socket to Citadel server */
+ StrBuf *ReadBuf;
int chat_sock; /**< Client socket to Citadel server - for chat */
time_t lastreq; /**< Timestamp of most recent HTTP */
time_t last_pager_check; /**< last time we polled for instant msgs */
int tcp_connectsock(char *, char *);
int serv_getln(char *strbuf, int bufsize);
int StrBuf_ServGetln(StrBuf *buf);
+int StrBuf_ServGetlnBuffered(StrBuf *buf);
int GetServerStatus(StrBuf *Line, long* FullState);
void serv_puts(const char *string);
void who(void);
serv_getln(buf, sizeof buf);
if (buf[0] == '1') {
Buf = NewStrBuf();
- while (BufLen = StrBuf_ServGetln(Buf), strcmp(ChrPtr(Buf), "000")) {
+ while (BufLen = StrBuf_ServGetlnBuffered(Buf), strcmp(ChrPtr(Buf), "000")) {
if (BufLen <= 0)
continue;
Pos = NULL;