Exemplo n.º 1
0
Arquivo: rconn.c Projeto: ecks/harry
/* Attempts to receive a packet from 'rc'.  If successful, returns the packet;
 * otherwise, returns a null pointer.  The caller is responsible for freeing
 * the packet (with ofpbuf_delete()). */
struct rfpbuf *
rconn_recv(struct rconn *rc)
{
  if (rc->state & (S_ACTIVE | S_IDLE)) {
      struct rfpbuf *buffer;
      int error = vconn_recv(rc->vconn, &buffer);
      if (!error) {
          if (rc->state == S_IDLE) {
              state_transition(rc, S_ACTIVE);
          }
          return buffer;
     } 
     else if (error != EAGAIN) 
     {
       if(error == ECONNRESET)
       {
         printf("The connection has been closed\n");
         rconn_disconnect(rc);
         return NULL;
       }
       else
       {
         printf("An error has occured\n");
         rconn_disconnect(rc);
       }
     }
  }
  return NULL;
}
Exemplo n.º 2
0
int main(void)
{
  int i = 0;
  int k = 0;
  int status = 0;
  int tape[N] = {0,0,1,1,0,0,1,1,1,0,0};


  while(status != 5){

	state_transition(&status,tape,&i);

	printf("<step%d>\n", i-1);
	if(status < 5){
	  printf("state:q_%d\n", status);
	}else{
	  printf("state:q_H\n");
	}
	print_array(tape);
	k++;

  }

  return 0;

}
Exemplo n.º 3
0
Arquivo: rconn.c Projeto: ecks/harry
/* Drops any existing connection on 'rc', then configures 'rc' to use 
 * 'vconn'.  If the connection on 'vconn' drops, 'rc' will not reconnect on it
 * own. 
 * 
 * By default, the target obtained from vconn_get_name(vconn) is used in log
 * messages.  If 'name' is nonnull, then it is used instead.  It should 
 * presumably give more information to a human reader than the target, but it 
 * need not be acceptable to vconn_open(). */
void rconn_connect_unreliably(struct rconn *rc, struct vconn *vconn, const char *name)
{    
  assert(vconn != NULL);    
  rconn_disconnect(rc);
  rconn_set_target__(rc, vconn_get_name(vconn));    
//  rc->reliable = false;    
  rc->vconn = vconn;    
//  rc->last_connected = time_now();
  state_transition(rc, S_ACTIVE);
}
Exemplo n.º 4
0
Arquivo: rconn.c Projeto: ecks/harry
void
rconn_disconnect(struct rconn *rc)
{
    if (rc->state != S_VOID) {
        if (rc->vconn) {
            vconn_close(rc->vconn);
            rc->vconn = NULL;
        }
        rconn_set_target__(rc, "void");
        state_transition(rc, S_VOID);
    }
}
Exemplo n.º 5
0
void
rconn_connect_unreliably(struct rconn *rc,
                         const char *name, struct vconn *vconn)
{
    assert(vconn != NULL);
    rconn_disconnect(rc);
    free(rc->name);
    rc->name = xstrdup(name);
    rc->reliable = false;
    rc->vconn = vconn;
    rc->last_connected = time_now();
    state_transition(rc, S_ACTIVE);
}
Exemplo n.º 6
0
Arquivo: rconn.c Projeto: ecks/harry
static void
run_CONNECTING(struct rconn *rc)
{
    int retval = vconn_connect(rc->vconn);
    if (!retval) {
        printf("%s: connected", rc->target);
        state_transition(rc, S_ACTIVE);
    } else if (retval != EAGAIN) {
            printf("%s: connection failed (%s)",
                      rc->target, strerror(retval));
        rconn_disconnect(rc);
    }
}
Exemplo n.º 7
0
void
rconn_disconnect(struct rconn *rc)
{
    if (rc->state != S_VOID) {
        if (rc->vconn) {
            vconn_close(rc->vconn);
            rc->vconn = NULL;
        }
        rconn_set_target__(rc, "void", NULL);
        rc->reliable = false;

        rc->backoff = 0;
        rc->backoff_deadline = TIME_MIN;

        state_transition(rc, S_VOID);
    }
}
Exemplo n.º 8
0
void
rconn_disconnect(struct rconn *rc)
{
    if (rc->state != S_VOID) {
        if (rc->vconn) {
            vconn_close(rc->vconn);
            rc->vconn = NULL;
        }
        free(rc->name);
        rc->name = xstrdup("void");
        rc->reliable = false;

        rc->backoff = 0;
        rc->backoff_deadline = TIME_MIN;

        state_transition(rc, S_VOID);
    }
}
Exemplo n.º 9
0
Arquivo: rconn.c Projeto: ecks/harry
static void
reconnect(struct rconn *rc)
{
    int retval;

    retval = vconn_open(rc->target, RFP10_VERSION, &rc->vconn, DSCP_DEFAULT);
    if (!retval) {
//        rc->remote_ip = vconn_get_remote_ip(rc->vconn);
//        rc->local_ip = vconn_get_local_ip(rc->vconn);
//        rc->remote_port = vconn_get_remote_port(rc->vconn);
        state_transition(rc, S_CONNECTING);
    } 
    else 
    {
        printf("%s: connection failed (%s)", rc->target, strerror(retval));
        rconn_disconnect(rc);
    }
}
Exemplo n.º 10
0
void
error_recoverable_error (void)
{
	error_broadcast_error_code (err_sev_recoverable, error_code);
	state_transition (state_idle);
}