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