FACT++  1.0
char* dis_get_client_services ( int  conn_id)

Definition at line 2536 of file dis.c.

References dll_get_next(), find_client(), Memory::free(), Memory::malloc(), MAX_NAME, serv::name, reqp_ent::reqp, cli_ent::requestp_head, and req_ent::service_ptr.

Referenced by dis_get_error_services(), DimServer::getClientServices(), and Java_dim_Server_getServices().

2537 {
2538  register REQUEST_PTR *reqpp;
2539  register CLIENT *clip;
2540  register REQUEST *reqp;
2541  register SERVICE *servp;
2542 
2543  int n_services = 0;
2544  int max_size;
2545  static int curr_allocated_size = 0;
2546  static char *service_info_buffer;
2547  char *buff_ptr;
2548 
2549 
2550  if(!conn_id)
2551  return((char *)0);
2552  {
2553  DISABLE_AST;
2554  clip = find_client(conn_id);
2555  if(clip)
2556  {
2557  reqpp = clip->requestp_head;
2558  while( (reqpp = (REQUEST_PTR *) dll_get_next((DLL *)clip->requestp_head,
2559  (DLL *) reqpp)))
2560  {
2561  n_services++;
2562  }
2563  if(!n_services)
2564  {
2565  ENABLE_AST
2566  return((char *)0);
2567  }
2568  max_size = n_services * MAX_NAME;
2569  if(!curr_allocated_size)
2570  {
2571  service_info_buffer = (char *)malloc((size_t)max_size);
2572  curr_allocated_size = max_size;
2573  }
2574  else if (max_size > curr_allocated_size)
2575  {
2576  free(service_info_buffer);
2577  service_info_buffer = (char *)malloc((size_t)max_size);
2578  curr_allocated_size = max_size;
2579  }
2580  service_info_buffer[0] = '\0';
2581  buff_ptr = service_info_buffer;
2582  reqpp = clip->requestp_head;
2583  while( (reqpp = (REQUEST_PTR *) dll_get_next((DLL *)clip->requestp_head,
2584  (DLL *) reqpp)) )
2585  {
2586  reqp = (REQUEST *) reqpp->reqp;
2587  servp = reqp->service_ptr;
2588  strcat(buff_ptr, servp->name);
2589  strcat(buff_ptr, "\n");
2590  buff_ptr += (int)strlen(buff_ptr);
2591  }
2592  }
2593  else
2594  {
2595  ENABLE_AST
2596  return((char *)0);
2597  }
2598  ENABLE_AST;
2599  }
2600 /*
2601  dim_print_date_time();
2602  dna_get_node_task(conn_id, node, task);
2603  printf("Client %s@%s uses services: \n", task, node);
2604  printf("%s\n",service_info_buffer);
2605 */
2606  return(service_info_buffer);
2607 }
#define MAX_NAME
Definition: dim.h:182
Definition: dis.c:98
char name[MAX_NAME]
Definition: dis.c:72
void * malloc()
Definition: EventBuilder.cc:99
CLIENT * find_client(int conn_id)
Definition: dis.c:2455
Definition: dim.h:530
Definition: dis.c:69
REQUEST_PTR * requestp_head
Definition: dis.c:102
struct serv * service_ptr
Definition: dis.c:59
void free(void *mem)
DLL * dll_get_next(DLL *head, DLL *item)
Definition: dll.c:66
Definition: dis.c:92
REQUEST * reqp
Definition: dis.c:95
Definition: dis.c:52

+ Here is the call graph for this function:

+ Here is the caller graph for this function: