Example #1
0
/*----------------------------------------------------------------------+*/
SPC_Setup_Synchronous_Terminator(void)
/*----------------------------------------------------------------------+*/
{
  int pipes[2];

  _DtSvcProcessLock();
  if(write_terminator) {
    _DtSvcProcessUnlock();
    return(TRUE);
  }
  
  if(pipe(pipes)<0) {
    SPC_Error(SPC_No_Pipe);
    _DtSvcProcessUnlock();
    return(SPC_ERROR);
  }

  if((write_terminator=SPC_Alloc_Connection())==SPC_ERROR) {
    _DtSvcProcessUnlock();
    return(SPC_ERROR);
  }
  SPC_Add_Connection(write_terminator);
  
  if((read_terminator=SPC_Alloc_Connection())==SPC_ERROR) {
    _DtSvcProcessUnlock();
    return(SPC_ERROR);
  }
  SPC_Add_Connection(read_terminator);

  write_terminator->sid=pipes[WRITE_SIDE];
  write_terminator->connected=TRUE;

  read_terminator->sid=pipes[READ_SIDE];
  read_terminator->connected=TRUE;
  SPC_XtAddInput(NULL, &read_terminator->termination_id, read_terminator->sid,
		 SPC_Conditional_Packet_Handler, SPC_Terminator);
  
  _DtSvcProcessUnlock();
  return(TRUE);
}
Example #2
0
/*----------------------------------------------------------------------+*/
SPC_Connection_Ptr SPC_Make_Connection(XeString hostname)
/*----------------------------------------------------------------------+*/
{
  /* Search for a connection to hostname, create one if none exists */
  
  SPC_Connection_Ptr conn;

  /* Searching for connected host maintains only one connection per remote */

  if(hostname && (conn=SPC_Lookup_Connection(hostname)))
    return(conn);
  
  /* Not found, so make one */
  
  if((conn = SPC_Alloc_Connection())==SPC_ERROR)
    return(SPC_ERROR);

  if(hostname)
    strcpy(conn->hostname, hostname);
  
  SPC_Add_Connection(conn);
  return(conn);
}