• Patch: Elm ME+ 2.5 PLalpha60 -> Elm ME+ 2.5 PLalpha61 [1/2] (3/6)

    From Kari Hurtta@21:1/5 to All on Mon Dec 5 17:03:46 2022
    [continued from previous message]

    ! step_enum_socket_address(walker);
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: ipv_option_index=%d master_idx=%d se_idx=%d mode=%d",
    ! walker->ipv_option_index,walker->master_idx, walker->se_idx,
    ! walker->mode));
    ! switch (walker->mode) {
    ! case enum_socket_address_next: DPRINT(Debug,14,(&Debug," enum_socket_address_next")); break;
    ! case enum_socket_address_used: DPRINT(Debug,14,(&Debug," enum_socket_address_used")); break;
    ! case enum_socket_address_end: DPRINT(Debug,14,(&Debug," enum_socket_address_end")); break;
    ! }
    ! DPRINT(Debug,14,(&Debug," after step\n"));
    !
    ! if (walker->se) {
    !
    ! if (SERVICE_ENTRY_magic != walker->se->magic)
    ! panic("CONNECTION PANIC",__FILE__,__LINE__,
    ! "have_enum_socket_address",
    ! "Bad magic (service_entry)",0);
    !
    ! if (walker->se->official_name) {
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: official_name=%s\n",
    ! walker->se->official_name));
    ! }
    !
    ! switch (walker->mode) {
    ! case enum_socket_address_next:
    !
    ! if (walker->se_idx < walker->se->addr_count) {
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: have address se_idx=%d < addr_count=%d\n",
    ! walker->se_idx,walker->se->addr_count));
    !
    ! ret = 1;
    ! }
    ! break;
    ! case enum_socket_address_used:
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: address used se_idx=%d\n",
    ! walker->se_idx));
    ! break;
    ! case enum_socket_address_end:
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: end of addresses\n")); ! break;
    ! }
    !
    ! } else {
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address: No se\n"));
    ! }
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "have_enum_socket_address=%d\n",ret));
    !
    ! return ret;
    ! }
    !
    ! static int idx_enum_socket_address P_((struct enum_socket_address * walker)); ! static int idx_enum_socket_address(walker)
    ! struct enum_socket_address * walker;
    ! {
    ! int ret;
    !
    !
    ! if (ENUM_SOCKET_ADDRESS_magic != walker->magic)
    ! panic("CONNECTION PANIC",__FILE__,__LINE__,
    ! "idx_enum_socket_address",
    ! "Bad magic (enum_socket_address)",0);
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "idx_enum_socket_address: ipv_option_index=%d master_idx=%d se_idx=%d mode=%d",
    ! walker->ipv_option_index,walker->master_idx, walker->se_idx,
    ! walker->mode));
    ! switch (walker->mode) {
    ! case enum_socket_address_next: DPRINT(Debug,14,(&Debug," enum_socket_address_next")); break;
    ! case enum_socket_address_used: DPRINT(Debug,14,(&Debug," enum_socket_address_used")); break;
    ! case enum_socket_address_end: DPRINT(Debug,14,(&Debug," enum_socket_address_end")); break;
    ! }
    ! DPRINT(Debug,14,(&Debug,"\n"));
    !
    !
    !
    ! ret = walker->master_idx;
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "idx_enum_socket_address=%d\n",ret));
    !
    ! return ret;
    ! }
    !
    ! /* Returns se_idx or -1 */
    ! static int advance_enum_socket_address P_((struct enum_socket_address * walker));
    ! static int advance_enum_socket_address(walker)
    ! struct enum_socket_address * walker;
    ! {
    ! int ret = -1;
    !
    ! if (ENUM_SOCKET_ADDRESS_magic != walker->magic)
    ! panic("CONNECTION PANIC",__FILE__,__LINE__,
    ! "advance_enum_socket_address",
    ! "Bad magic (enum_socket_address)",0);
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: ipv_option_index=%d master_idx=%d se_idx=%d mode=%d",
    ! walker->ipv_option_index,walker->master_idx, walker->se_idx,
    ! walker->mode));
    ! switch (walker->mode) {
    ! case enum_socket_address_next: DPRINT(Debug,14,(&Debug," enum_socket_address_next")); break;
    ! case enum_socket_address_used: DPRINT(Debug,14,(&Debug," enum_socket_address_used")); break;
    ! case enum_socket_address_end: DPRINT(Debug,14,(&Debug," enum_socket_address_end")); break;
    ! }
    ! DPRINT(Debug,14,(&Debug,"\n"));
    !
    ! if (walker->se) {
    !
    ! if (SERVICE_ENTRY_magic != walker->se->magic)
    ! panic("CONNECTION PANIC",__FILE__,__LINE__,
    ! "advance_enum_socket_address",
    ! "Bad magic (service_entry)",0);
    !
    ! if (walker->se->official_name) {
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: official_name=%s\n", ! walker->se->official_name));
    ! }
    !
    ! switch (walker->mode) {
    ! case enum_socket_address_next:
    !
    ! if (walker->se_idx < walker->se->addr_count) {
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: have address se_idx=%d < addr_count=%d -- marking uesed\n",
    ! walker->se_idx,walker->se->addr_count));
    !
    ! ret = walker->se_idx;
    ! walker->mode = enum_socket_address_used;
    ! }
    ! break;
    ! case enum_socket_address_used:
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: address used se_idx=%d\n",
    ! walker->se_idx));
    ! break;
    ! case enum_socket_address_end:
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: end of addresses\n"));
    ! break;
    ! }
    ! } else {
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address: No se\n"));
    ! }
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "advance_enum_socket_address=%d\n",ret));
    !
    !
    ! return ret;
    ! }
    !
    ! /* also idx_enum_socket_address -- but may advance step */
    ! static int next_enum_socket_address P_((struct enum_socket_address * walker, ! int *next_idx));
    ! static int next_enum_socket_address(walker,next_idx)
    ! struct enum_socket_address * walker;
    ! int *next_idx;
    ! {
    ! int ret = 0;
    !
    ! if (ENUM_SOCKET_ADDRESS_magic != walker->magic)
    ! panic("CONNECTION PANIC",__FILE__,__LINE__,
    ! "next_enum_socket_address",
    ! "Bad magic (enum_socket_address)",0);
    !
    ! step_enum_socket_address(walker);
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "next_enum_socket_address: ipv_option_index=%d master_idx=%d se_idx=%d mode=%d",
    ! walker->ipv_option_index,walker->master_idx, walker->se_idx,
    ! walker->mode));
    ! switch (walker->mode) {
    ! case enum_socket_address_next: DPRINT(Debug,14,(&Debug," enum_socket_address_next")); break;
    ! case enum_socket_address_used: DPRINT(Debug,14,(&Debug," enum_socket_address_used")); break;
    ! case enum_socket_address_end: DPRINT(Debug,14,(&Debug," enum_socket_address_end")); break;
    ! }
    ! DPRINT(Debug,14,(&Debug," after step\n"));
    !
    ! if (next_idx)
    ! *next_idx = walker->master_idx;
    !
    ! switch (walker->mode) {
    ! case enum_socket_address_next:
    ! ret = 1;
    ! break;
    ! case enum_socket_address_used:
    ! case enum_socket_address_end:
    ! ret = 0;
    ! }
    !
    ! DPRINT(Debug,14,(&Debug,
    ! "next_enum_socket_address=%d",
    ! ret));
    ! if (next_idx) {
    ! DPRINT(Debug,14,(&Debug,"; *next_idx=",
    ! *next_idx));
    ! }
    ! DPRINT(Debug,14,(&Debug,"\n"));
    !
    ! return ret;
    ! }


    int connect_remote_account_2(ra,initial_se,main_cancel,
    ***************
    *** 4220,4226 ****
    struct bgconnect_list * bglist = NULL;
    struct cancel_data * bgcan = NULL;

    - int idx, next_idx = 0;
    int last_error = 0;
    int cur_socket = -1;
    int was_canceled = 0;
    --- 5137,5142 ----
    ***************
    *** 4228,4233 ****
    --- 5144,5151 ----
    struct service_entry * this_se = NULL; /* not refcounted */
    const struct service_type * this_type = NULL;
    int this_port = 0;
    + struct enum_socket_address walker = NULL_enum_socket_address;
    +

    int portgroup = 0; /* loop number, when scanning different ports on same address */

    ***************
    *** 4264,4274 ****
    initial_se->official_name,
    initial_se->addr_count));

    ! for (idx = 0; idx < initial_se->addr_count; idx = next_idx) {
    enum connect_result r = connect_none;
    char * addrstring = NULL;
    !
    ! connect_socket_reset(&cur_socket,idx);

    if (bglist)
    r = bgconnect_got_connection(bglist,ra,&cur_socket,&this_port,&this_type,
    --- 5182,5196 ----
    initial_se->official_name,
    initial_se->addr_count));

    ! for (init_enum_socket_address(&walker,initial_se);
    ! have_enum_socket_address(&walke