Lines Matching refs:conn
120 static int _fs_restart_connection ( FSFpePtr conn );
123 static int fs_send_close_font (FSFpePtr conn, Font id);
125 static void _fs_client_access ( FSFpePtr conn, pointer client, Bool sync );
126 static void _fs_client_resolution ( FSFpePtr conn );
127 static fsGenericReply *fs_get_reply (FSFpePtr conn, int *error);
128 static int fs_await_reply (FSFpePtr conn);
129 static void _fs_do_blocked (FSFpePtr conn);
130 static void fs_cleanup_bfont (FSFpePtr conn, FSBlockedFontPtr bfont);
141 _fs_close_server (FSFpePtr conn);
147 _fs_wait_connect (FSFpePtr conn);
150 _fs_send_init_packets (FSFpePtr conn);
153 _fs_check_reconnect (FSFpePtr conn);
156 _fs_start_reconnect (FSFpePtr conn);
159 _fs_free_conn (FSFpePtr conn);
188 _fs_add_req_log(FSFpePtr conn, int opcode)
190 conn->current_seq++;
192 conn->current_seq, opcode);
193 conn->reqbuffer[conn->reqindex].opcode = opcode;
194 conn->reqbuffer[conn->reqindex].sequence = conn->current_seq;
195 conn->reqindex++;
196 if (conn->reqindex == REQUEST_LOG_SIZE)
197 conn->reqindex = 0;
201 _fs_add_rep_log (FSFpePtr conn, fsGenericReply *rep)
206 if (conn->reqbuffer[i].sequence == rep->sequenceNumber)
214 conn->reqbuffer[i].opcode);
229 #define _fs_add_req_log(conn,op) ((conn)->current_seq++)
230 #define _fs_add_rep_log(conn,rep)
242 _fs_client_resolution(FSFpePtr conn)
256 _fs_add_req_log(conn, FS_SetResolution);
257 if (_fs_write(conn, (char *) &srreq, SIZEOF(fsSetResolutionReq)) != -1)
258 (void)_fs_write_pad(conn, (char *) res,
269 fs_close_conn(FSFpePtr conn)
273 _fs_close_server (conn);
275 for (client = conn->clients; client; client = nclient)
280 conn->clients = NULL;
292 FSFpePtr conn;
305 conn = _fs_init_conn (name, fpe);
306 if (!conn)
313 _fs_free_conn (conn);
318 fpe->private = conn;
319 conn->next = fs_fpes;
320 fs_fpes = conn;
321 ret = _fs_wait_connect (conn);
362 FSFpePtr conn = (FSFpePtr) fpe->private, *prev;
367 if (*prev == conn)
369 *prev = conn->next;
373 _fs_unmark_block (conn, conn->blockState);
374 fs_close_conn(conn);
376 _fs_free_conn (conn);
391 FSFpePtr conn = (FSFpePtr) fpe->private;
423 for (prev = &conn->blockedRequests; *prev; prev = &(*prev)->next)
431 _fs_set_pending_reply (FSFpePtr conn)
435 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
440 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
441 _fs_mark_block (conn, FS_PENDING_REPLY);
444 _fs_unmark_block (conn, FS_PENDING_REPLY);
448 _fs_remove_block_rec(FSFpePtr conn, FSBlockDataPtr blockrec)
452 for (prev = &conn->blockedRequests; *prev; prev = &(*prev)->next)
465 _fs_set_pending_reply (conn);
504 conn_start_listening(FSFpePtr conn)
506 if (!conn->fs_listening) {
507 add_fs_fd(conn->fs_fd, fs_fd_handler, conn->fpe);
508 conn->fs_listening = TRUE;
513 conn_stop_listening(FSFpePtr conn)
515 if (conn->fs_listening) {
516 remove_fs_fd(conn->fs_fd);
517 conn->fs_listening = FALSE;
527 _fs_clean_aborted_blockrec(FSFpePtr conn, FSBlockDataPtr blockrec)
533 fs_cleanup_bfont (conn, bfont);
552 conn_start_listening(conn);
561 fs_abort_blockrec(FSFpePtr conn, FSBlockDataPtr blockrec)
563 _fs_clean_aborted_blockrec (conn, blockrec);
564 _fs_remove_block_rec (conn, blockrec);
572 fs_cleanup_bfont (FSFpePtr conn, FSBlockedFontPtr bfont)
577 fs_send_close_font(conn, bfont->fontid);
606 fs_get_reply (FSFpePtr conn, int *error)
613 if (conn->fs_fd == -1 || !conn->fs_listening)
619 ret = _fs_start_read (conn, sizeof (fsGenericReply), &buf);
638 _fs_connection_died (conn);
643 ret = _fs_start_read (conn, rep->length << 2, &buf);
656 fs_reply_ready (FSFpePtr conn)
660 if (conn->fs_fd == -1 || !conn->fs_listening)
662 if (fs_data_read (conn) < sizeof (fsGenericReply))
664 rep = (fsGenericReply *) (conn->inBuf.buf + conn->inBuf.remove);
665 if (fs_data_read (conn) < rep->length << 2)
671 _fs_pending_reply (FSFpePtr conn)
673 if (!(conn->blockState & FS_PENDING_REPLY))
675 _fs_mark_block (conn, FS_PENDING_REPLY);
676 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
681 _fs_prepare_for_reply (FSFpePtr conn)
683 _fs_pending_reply (conn);
684 _fs_flush (conn);
691 fs_await_reply (FSFpePtr conn)
695 if (conn->blockState & FS_COMPLETE_REPLY)
698 while (!fs_get_reply (conn, &ret))
702 if (_fs_wait_for_readable (conn, FontServerRequestTimeout) != FSIO_READY)
704 _fs_connection_died (conn);
717 FSFpePtr conn = (FSFpePtr) fpe->private;
724 rep = (fsOpenBitmapFontReply *) fs_get_reply (conn, &ret);
731 _fs_done_read (conn, rep->length << 2);
732 fs_cleanup_bfont (conn, bfont);
748 fs_cleanup_bfont (conn, bfont);
758 for (blockOrig = conn->blockedRequests;
791 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
794 _fs_done_read (conn, rep->length << 2);
857 FSFpePtr conn = (FSFpePtr) fpe->private;
869 rep = (fsQueryXInfoReply *) fs_get_reply (conn, &ret);
876 _fs_done_read (conn, rep->length << 2);
877 fs_cleanup_bfont (conn, bfont);
899 _fs_init_fontinfo(conn, pInfo);
946 _fs_done_read (conn, rep->length << 2);
950 fs_cleanup_bfont (conn, bfont);
969 fs_cleanup_bfont (conn, bfont);
1001 _fs_flush (conn);
1010 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
1018 FSFpePtr conn = (FSFpePtr) fpe->private;
1034 rep = (fsQueryXExtents16Reply *) fs_get_reply (conn, &ret);
1041 _fs_done_read (conn, rep->length << 2);
1042 fs_cleanup_bfont (conn, bfont);
1051 if (bfont->pfont->info.terminalFont && conn->fsMajorVersion > 1)
1079 _fs_done_read (conn, rep->length << 2);
1080 fs_cleanup_bfont(conn, bfont);
1134 _fs_done_read (conn, rep->length << 2);
1209 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
1283 _fs_mark_block (FSFpePtr conn, CARD32 mask)
1285 conn->blockState |= mask;
1290 _fs_unmark_block (FSFpePtr conn, CARD32 mask)
1294 if (conn->blockState & mask)
1296 conn->blockState &= ~mask;
1309 FSFpePtr conn;
1315 for (conn = fs_fpes; conn; conn = conn->next)
1316 if (conn->blockState & FS_PENDING_WRITE)
1317 _fs_flush (conn);
1333 for (conn = fs_fpes; conn; conn = conn->next)
1335 if (conn->blockState & FS_RECONNECTING)
1337 wakeup = conn->blockedConnectTime;
1341 if (conn->blockState & FS_BROKEN_CONNECTION)
1343 wakeup = conn->brokenConnectionTime;
1347 if (conn->blockState & FS_BROKEN_WRITE)
1349 wakeup = conn->brokenWriteTime;
1353 if (conn->blockState & FS_PENDING_REPLY)
1355 wakeup = conn->blockedReplyTime;
1368 fs_handle_unexpected(FSFpePtr conn, fsGenericReply *rep)
1377 _fs_add_req_log(conn, FS_Noop);
1378 _fs_write(conn, (char *) &req, SIZEOF(fsNoopReq));
1381 _fs_done_read (conn, rep->length << 2);
1387 FSFpePtr conn = (FSFpePtr) fpe->private;
1393 if ((rep = fs_get_reply (conn, &ret)))
1395 _fs_add_rep_log (conn, rep);
1396 for (blockrec = conn->blockedRequests;
1406 fs_handle_unexpected(conn, rep);
1440 _fs_unmark_block (conn, FS_PENDING_REPLY);
1443 if (fs_reply_ready (conn))
1444 _fs_mark_block (conn, FS_COMPLETE_REPLY);
1446 _fs_unmark_block (conn, FS_COMPLETE_REPLY);
1454 FSFpePtr conn = (FSFpePtr) fpe->private;
1460 if ((conn->blockState & FS_RECONNECTING))
1461 _fs_check_reconnect (conn);
1462 else if ((conn->fs_fd != -1))
1469 FSFpePtr conn = (FSFpePtr) fpe->private;
1471 if ((conn->blockState & FS_RECONNECTING))
1472 _fs_check_reconnect (conn);
1473 if (conn->blockState & (FS_PENDING_REPLY|FS_BROKEN_CONNECTION|FS_BROKEN_WRITE))
1474 _fs_do_blocked (conn);
1475 if (conn->blockState & FS_COMPLETE_REPLY)
1484 if (conn->blockState || conn->blockedRequests || lastState || lastBlock)
1486 fprintf (stderr, " Block State 0x%x\n", (int) conn->blockState);
1487 lastState = conn->blockState;
1488 lastBlock = conn->blockedRequests;
1490 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
1525 _fs_connection_died(FSFpePtr conn)
1527 if (conn->blockState & FS_BROKEN_CONNECTION)
1529 fs_close_conn(conn);
1530 conn->brokenConnectionTime = GetTimeInMillis ();
1531 _fs_mark_block (conn, FS_BROKEN_CONNECTION);
1532 _fs_unmark_block (conn, FS_BROKEN_WRITE|FS_PENDING_WRITE|FS_RECONNECTING);
1539 _fs_restart_connection(FSFpePtr conn)
1543 _fs_unmark_block (conn, FS_GIVE_UP);
1544 while ((block = (FSBlockDataPtr) conn->blockedRequests))
1549 fs_abort_blockrec(conn, block);
1559 _fs_giveup (FSFpePtr conn)
1563 if (conn->blockState & FS_GIVE_UP)
1566 fprintf (stderr, "give up on FS \"%s\"\n", conn->servername);
1568 _fs_mark_block (conn, FS_GIVE_UP);
1569 while ((block = (FSBlockDataPtr) conn->blockedRequests))
1574 fs_abort_blockrec (conn, block);
1577 if (conn->fs_fd >= 0)
1578 _fs_connection_died (conn);
1582 _fs_do_blocked (FSFpePtr conn)
1587 if ((conn->blockState & FS_PENDING_REPLY) &&
1588 TimeCmp (conn->blockedReplyTime, <=, now))
1590 _fs_giveup (conn);
1594 if (conn->blockState & FS_BROKEN_CONNECTION)
1597 if (TimeCmp (conn->brokenConnectionTime, <=, now))
1598 _fs_start_reconnect (conn);
1600 else if (conn->blockState & FS_BROKEN_WRITE)
1603 if (TimeCmp (conn->brokenWriteTime, <=, now))
1604 _fs_flush (conn);
1619 FSFpePtr conn = (FSFpePtr) fpe->private;
1630 if (conn->blockState & FS_GIVE_UP)
1685 fsd->generation = conn->generation;
1700 if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
1702 _fs_pending_reply (conn);
1706 _fs_client_access (conn, client, (flags & FontOpenSync) != 0);
1707 _fs_client_resolution(conn);
1719 _fs_add_req_log(conn, FS_OpenBitmapFont);
1720 _fs_write(conn, (char *) &openreq, SIZEOF(fsOpenBitmapFontReq));
1721 _fs_write_pad(conn, (char *) buf, namelen + 1);
1723 blockrec->sequenceNumber = conn->current_seq;
1730 bfont->queryInfoSequence = conn->current_seq + 1;
1732 _fs_add_req_log(conn, FS_QueryXInfo);
1733 _fs_write(conn, (char *) &inforeq, SIZEOF(fsQueryXInfoReq));
1743 bfont->queryExtentsSequence = conn->current_seq + 1;
1745 _fs_add_req_log(conn, FS_QueryXExtents16);
1746 _fs_write(conn, (char *) &extreq, SIZEOF(fsQueryXExtents16Req));
1749 _fs_prepare_for_reply (conn);
1756 if (fs_await_reply (conn) != FSIO_READY)
1767 fs_cleanup_bfont (conn, bfont);
1769 _fs_remove_block_rec (conn, blockrec);
1777 FSFpePtr conn = (FSFpePtr) fpe->private;
1789 bfont->queryBitmapsSequence = conn->current_seq + 1;
1791 _fs_add_req_log(conn, FS_QueryXBitmaps16);
1792 _fs_write(conn, (char *) &bitreq, SIZEOF(fsQueryXBitmaps16Req));
1803 FSFpePtr conn = (FSFpePtr) fpe->private;
1812 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
1824 fs_cleanup_bfont (conn, bfont);
1825 _fs_remove_block_rec (conn, blockrec);
1835 fs_send_close_font(FSFpePtr conn, Font id)
1839 if (conn->blockState & FS_GIVE_UP)
1846 _fs_add_req_log(conn, FS_CloseFont);
1847 _fs_write(conn, (char *) &req, SIZEOF(fsCloseReq));
1857 FSFpePtr conn = (FSFpePtr) fpe->private;
1859 if (conn->generation == fsd->generation)
1860 fs_send_close_font(conn, fsd->fontid);
1867 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
1886 FSFpePtr conn = (FSFpePtr) fpe->private;
1913 rep = (fsQueryXBitmaps16Reply *) fs_get_reply (conn, &ret);
1920 _fs_done_read (conn, rep->length << 2);
2058 _fs_done_read (conn, rep->length << 2);
2067 FSFpePtr conn = (FSFpePtr) fpe->private;
2072 if (conn->blockState & FS_GIVE_UP)
2086 if (conn->blockState & (FS_BROKEN_CONNECTION|FS_RECONNECTING))
2088 _fs_pending_reply (conn);
2103 _fs_add_req_log(conn, FS_QueryXBitmaps16);
2104 _fs_write(conn, (char *) &req, SIZEOF(fsQueryXBitmaps16Req));
2106 blockrec->sequenceNumber = conn->current_seq;
2122 if (conn->fsMajorVersion > 1)
2139 _fs_write(conn, range_buffer, RANGE_BUFFER_SIZE * 4);
2144 _fs_write(conn, range_buffer, i * 4);
2147 _fs_prepare_for_reply (conn);
2155 FSFpePtr conn = (FSFpePtr) pfont->fpe->private;
2165 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
2179 _fs_remove_block_rec(conn, blockrec);
2210 _fs_remove_block_rec(conn, blockrec);
2267 * If fsd->generation != conn->generation, the font has been closed
2284 if (((FSFontDataPtr)pfont->fpePrivate)->generation != conn->generation)
2305 FSFpePtr conn = (FSFpePtr) pfont->fpe->private;
2322 if (fs_await_reply (conn) != FSIO_READY)
2337 FSFpePtr conn = (FSFpePtr) fpe->private;
2347 rep = (fsListFontsReply *) fs_get_reply (conn, &ret);
2354 _fs_done_read (conn, rep->length << 2);
2384 _fs_done_read (conn, rep->length << 2);
2392 FSFpePtr conn = (FSFpePtr) fpe->private;
2397 if (conn->blockState & FS_GIVE_UP)
2407 if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
2409 _fs_pending_reply (conn);
2413 _fs_client_access (conn, client, FALSE);
2414 _fs_client_resolution(conn);
2422 _fs_add_req_log(conn, FS_ListFonts);
2423 _fs_write(conn, (char *) &req, SIZEOF(fsListFontsReq));
2424 _fs_write_pad(conn, (char *) pattern, patlen);
2426 blockrec->sequenceNumber = conn->current_seq;
2428 _fs_prepare_for_reply (conn);
2436 FSFpePtr conn = (FSFpePtr) fpe->private;
2441 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
2448 _fs_remove_block_rec(conn, blockrec);
2467 FSFpePtr conn = (FSFpePtr) fpe->private;
2477 rep = (fsListFontsWithXInfoReply *) fs_get_reply (conn, &ret);
2510 if (conn->fsMajorVersion <= 1)
2562 if (conn->fsMajorVersion > 1)
2583 err = _fs_convert_lfwi_reply(conn, &binfo->info, rep, pi, po, pd);
2595 _fs_unmark_block (conn, FS_COMPLETE_REPLY);
2596 conn_stop_listening(conn);
2598 _fs_done_read (conn, rep->length << 2);
2607 FSFpePtr conn = (FSFpePtr) fpe->private;
2612 if (conn->blockState & FS_GIVE_UP)
2624 if (conn->blockState & (FS_BROKEN_CONNECTION | FS_RECONNECTING))
2626 _fs_pending_reply (conn);
2630 _fs_client_access (conn, client, FALSE);
2631 _fs_client_resolution(conn);
2639 _fs_add_req_log(conn, FS_ListFontsWithXInfo);
2640 (void) _fs_write(conn, (char *) &req, SIZEOF(fsListFontsWithXInfoReq));
2641 (void) _fs_write_pad(conn, pattern, len);
2643 blockrec->sequenceNumber = conn->current_seq;
2645 _fs_prepare_for_reply (conn);
2656 FSFpePtr conn = (FSFpePtr) fpe->private;
2662 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
2688 conn_start_listening(conn);
2689 if (fs_reply_ready (conn))
2690 _fs_mark_block (conn, FS_COMPLETE_REPLY);
2695 _fs_remove_block_rec(conn, blockrec);
2700 conn->blockedReplyTime = GetTimeInMillis () + FontServerRequestTimeout;
2701 _fs_mark_block (conn, FS_PENDING_REPLY);
2715 FSFpePtr conn = (FSFpePtr) fpe->private;
2721 for (prev = &conn->clients; (cur = *prev); prev = &cur->next)
2728 _fs_add_req_log(conn, FS_FreeAC);
2729 _fs_write (conn, (char *) &freeac, sizeof (fsFreeACReq));
2736 for (blockrec = conn->blockedRequests; blockrec; blockrec = blockrec->next)
2750 fs_abort_blockrec(conn, blockrec);
2754 _fs_client_access (FSFpePtr conn, pointer client, Bool sync)
2765 if (conn->blockState & (FS_RECONNECTING|FS_BROKEN_CONNECTION))
2770 for (prev = &conn->clients; (cur = *prev); prev = &cur->next)
2774 if (prev != &conn->clients)
2777 cur->next = conn->clients;
2778 conn->clients = cur;
2789 cur->next = conn->clients;
2790 conn->clients = cur;
2803 _fs_add_req_log(conn, FS_FreeAC);
2804 _fs_write (conn, (char *) &freeac, sizeof (fsFreeACReq));
2817 _fs_add_req_log(conn, FS_CreateAC);
2818 _fs_write(conn, (char *) &crac, sizeof (fsCreateACReq));
2819 _fs_write_pad(conn, authorizations, authlen);
2821 conn->curacid = 0;
2824 if (conn->curacid != cur->acid)
2830 _fs_add_req_log(conn, FS_SetAuthorization);
2831 _fs_write(conn, (char *) &setac, sizeof (fsSetAuthorizationReq));
2832 conn->curacid = cur->acid;
2841 _fs_check_connect (FSFpePtr conn)
2845 ret = _fs_poll_connect (conn->trans_conn, 0);
2848 conn->fs_fd = _FontTransGetConnectionNumber (conn->trans_conn);
2849 conn_start_listening(conn);
2863 _fs_get_conn_setup (FSFpePtr conn, int *error, int *setup_len)
2872 ret = _fs_start_read (conn, SIZEOF (fsConnSetup), &data);
2896 ret = _fs_start_read (conn, headlen + SIZEOF (fsConnSetupAccept), &data);
2906 ret = _fs_start_read (conn, len, &data);
2917 _fs_send_conn_client_prefix (FSFpePtr conn)
2936 ret = _fs_write (conn, (char *) &req, SIZEOF (fsConnClientPrefix));
2939 conn->blockedConnectTime = GetTimeInMillis () + FontServerRequestTimeout;
2944 _fs_recv_conn_setup (FSFpePtr conn)
2953 setup = _fs_get_conn_setup (conn, &ret, &setup_len);
2956 conn->current_seq = 0;
2957 conn->fsMajorVersion = setup->major_version;
2962 if (conn->alternate == 0)
2968 if (conn->alts)
2970 free (conn->alts);
2971 conn->alts = 0;
2972 conn->numAlts = 0;
3008 conn->numAlts = setup->num_alternates;
3009 conn->alts = alts;
3013 _fs_done_read (conn, setup_len);
3020 _fs_open_server (FSFpePtr conn)
3025 if (conn->alternate == 0)
3026 servername = conn->servername;
3028 servername = conn->alts[conn->alternate-1].name;
3029 conn->trans_conn = _fs_connect (servername, &ret);
3030 conn->blockedConnectTime = GetTimeInMillis () + FS_RECONNECT_WAIT;
3046 _fs_send_init_packets (FSFpePtr conn)
3069 _fs_add_req_log(conn, FS_SetResolution);
3070 if (_fs_write(conn, (char *) &srreq, SIZEOF(fsSetResolutionReq)) != FSIO_READY)
3072 if (_fs_write_pad(conn, (char *) res, (num_res * SIZEOF(fsResolution))) != FSIO_READY)
3077 if (conn->alternate != 0)
3078 catalogues = _fs_catalog_name (conn->alts[conn->alternate-1].name);
3080 catalogues = _fs_catalog_name (conn->servername);
3084 conn->has_catalogues = FALSE;
3087 conn->has_catalogues = TRUE;
3109 _fs_add_req_log(conn, FS_SetCatalogues);
3110 if (_fs_write(conn, (char *) &screq, SIZEOF(fsSetCataloguesReq)) != FSIO_READY)
3120 if (_fs_write (conn, &len, 1) != FSIO_READY)
3122 if (_fs_write (conn, cat, (int) len) != FSIO_READY)
3127 if (_fs_write (conn, "....", _fs_pad_length (clen) - clen) != FSIO_READY)
3134 _fs_send_cat_sync (FSFpePtr conn)
3148 _fs_add_req_log(conn, FS_SetCatalogues);
3149 if (_fs_write(conn, (char *) &lcreq, SIZEOF(fsListCataloguesReq)) != FSIO_READY)
3151 conn->blockedConnectTime = GetTimeInMillis () + FontServerRequestTimeout;
3156 _fs_recv_cat_sync (FSFpePtr conn)
3163 reply = fs_get_reply (conn, &err);
3174 _fs_done_read (conn, reply->length << 2);
3179 _fs_close_server (FSFpePtr conn)
3181 _fs_unmark_block (conn, FS_PENDING_WRITE|FS_BROKEN_WRITE|FS_COMPLETE_REPLY|FS_BROKEN_CONNECTION);
3182 if (conn->trans_conn)
3184 _FontTransClose (conn->trans_conn);
3185 conn->trans_conn = 0;
3186 _fs_io_reinit (conn);
3188 if (conn->fs_fd >= 0)
3190 conn_stop_listening(conn);
3191 conn->fs_fd = -1;
3193 conn->fs_conn_state = FS_CONN_UNCONNECTED;
3197 _fs_do_setup_connection (FSFpePtr conn)
3204 fprintf (stderr, "fs_do_setup_connection state %d\n", conn->fs_conn_state);
3206 switch (conn->fs_conn_state) {
3208 ret = _fs_open_server (conn);
3210 conn->fs_conn_state = FS_CONN_CONNECTING;
3213 ret = _fs_check_connect (conn);
3216 ret = _fs_send_conn_client_prefix (conn);
3219 ret = _fs_recv_conn_setup (conn);
3222 ret = _fs_send_init_packets (conn);
3223 if (conn->has_catalogues)
3224 ret = _fs_send_cat_sync (conn);
3227 if (conn->has_catalogues)
3228 ret = _fs_recv_cat_sync (conn);
3238 if (conn->fs_conn_state < FS_CONN_RUNNING)
3239 conn->fs_conn_state++;
3242 if (TimeCmp (GetTimeInMillis (), <, conn->blockedConnectTime))
3247 _fs_close_server (conn);
3251 if (conn->alternate < conn->numAlts)
3253 conn->alternate++;
3257 conn->alternate = 0;
3260 } while (conn->fs_conn_state != FS_CONN_RUNNING && ret == FSIO_READY);
3262 conn->generation = ++generationCount;
3267 _fs_wait_connect (FSFpePtr conn)
3273 ret = _fs_do_setup_connection (conn);
3276 if (conn->fs_conn_state <= FS_CONN_CONNECTING)
3277 ret = _fs_poll_connect (conn->trans_conn, 1000);
3279 ret = _fs_wait_for_readable (conn, 1000);
3290 _fs_check_reconnect (FSFpePtr conn)
3294 ret = _fs_do_setup_connection (conn);
3297 _fs_unmark_block (conn, FS_RECONNECTING|FS_GIVE_UP);
3298 _fs_restart_connection (conn);
3303 conn->brokenConnectionTime = GetTimeInMillis () + FS_RECONNECT_POLL;
3312 _fs_start_reconnect (FSFpePtr conn)
3314 if (conn->blockState & FS_RECONNECTING)
3316 conn->alternate = 0;
3317 _fs_mark_block (conn, FS_RECONNECTING);
3318 _fs_unmark_block (conn, FS_BROKEN_CONNECTION);
3319 _fs_check_reconnect (conn);
3326 FSFpePtr conn;
3329 conn = calloc (1, sizeof (FSFpeRec) + snlen);
3330 if (!conn)
3332 if (!_fs_io_init (conn))
3334 free (conn);
3337 conn->servername = (char *) (conn + 1);
3338 conn->fs_conn_state = FS_CONN_UNCONNECTED;
3339 conn->fs_fd = -1;
3340 conn->fpe = fpe;
3341 strlcpy (conn->servername, servername, snlen);
3342 return conn;
3346 _fs_free_conn (FSFpePtr conn)
3348 _fs_close_server (conn);
3349 _fs_io_fini (conn);
3350 if (conn->alts)
3351 free (conn->alts);
3352 free (conn);