void dp_run(struct datapath *dp) { time_t now = time_now(); struct remote *r, *rn; size_t i; if (now != dp->last_timeout) { dp->last_timeout = now; pipeline_timeout(dp->pipeline); } poll_timer_wait(1000); dp_ports_run(dp); /* Talk to remotes. */ LIST_FOR_EACH_SAFE (r, rn, struct remote, node, &dp->remotes) { remote_run(dp, r); } for (i = 0; i < dp->n_listeners; ) { struct pvconn *pvconn = dp->listeners[i]; struct vconn *new_vconn; int retval = pvconn_accept(pvconn, OFP_VERSION, &new_vconn); if (!retval) { remote_create(dp, rconn_new_from_vconn("passive", new_vconn)); } else if (retval != EAGAIN) { VLOG_WARN_RL(LOG_MODULE, &rl, "accept failed (%s)", strerror(retval)); dp->listeners[i] = dp->listeners[--dp->n_listeners]; continue; } i++; } }
static int create_and_configure_origin( git_remote **out, git_repository *repo, const char *url, const git_clone_options *options) { int error; git_remote *origin = NULL; char buf[GIT_PATH_MAX]; git_remote_create_cb remote_create = options->remote_cb; void *payload = options->remote_cb_payload; /* If the path exists and is a dir, the url should be the absolute path */ if (git_path_root(url) < 0 && git_path_exists(url) && git_path_isdir(url)) { if (p_realpath(url, buf) == NULL) return -1; url = buf; } if (!remote_create) { remote_create = default_remote_create; payload = NULL; } if ((error = remote_create(&origin, repo, "origin", url, payload)) < 0) goto on_error; *out = origin; return 0; on_error: git_remote_free(origin); return error; }
void* request_handler(void* connection){ int bytes_recieved = 0; char rec_data[4096]; int connected = *(int*)connection; //Receive the request bytes_recieved = recv(connected,rec_data,4096,0); rec_data[bytes_recieved]='\0'; fflush(stdout); char* response; char* request_copy = strdup(rec_data); char* tokenreq = strtok(rec_data," ,"); char* firstarg = tokenreq; //switch on first argument of request which is system call name if( !strcmp(firstarg,"readdir") ) { tokenreq = strtok(NULL, " ,"); response = remote_readdir(tokenreq); } else if( !strcmp(firstarg,"getattr")){ tokenreq = strtok(NULL, " ,"); response = remote_getattr(tokenreq); } else if( !strcmp(firstarg,"opendir")){ tokenreq = strtok(NULL, " ,"); response = remote_opendir(tokenreq); } else if( !strcmp(firstarg,"releasedir")){ tokenreq = strtok(NULL, " ,"); response = remote_releasedir(tokenreq); } else if( !strcmp(firstarg,"mkdir")){ tokenreq = strtok(NULL, " ,"); mode_t mode = (mode_t)atoi(strtok(NULL, " ,")); response = remote_mkdir(tokenreq,mode); } else if( !strcmp(firstarg,"read")){ tokenreq = strtok(NULL, " ,"); size_t size = (size_t)atoi(strtok(NULL, " ,")); off_t offset = (off_t)atoi(strtok(NULL, " ,")); response = remote_read(tokenreq,size,offset); } else if( !strcmp(firstarg,"open")){ tokenreq = strtok(NULL, " ,"); int flags = atoi(strtok(NULL, " ,")); response = remote_open(tokenreq, flags); } else if( !strcmp(firstarg,"release")){ tokenreq = strtok(NULL, " ,"); response = remote_release(tokenreq); } else if( !strcmp(firstarg,"write")){ tokenreq = strtok(NULL, " ,"); size_t size = (size_t)atoi(strtok(NULL, " ,")); off_t offset = (off_t)atoi(strtok(NULL, " ,")); //cut off the string so it just has the info to be written response = remote_write(tokenreq,size,offset,request_copy); } else if( !strcmp(firstarg,"truncate")){ tokenreq = strtok(NULL, " ,"); off_t newsize = (off_t)atoi(strtok(NULL, " ,")); response = remote_truncate(tokenreq,newsize); } else if( !strcmp(firstarg,"create")){ tokenreq = strtok(NULL, " ,"); mode_t mode = (mode_t)atoi(strtok(NULL, " ,")); response = remote_create(tokenreq,mode); } else if( !strcmp(firstarg,"unlink")){ tokenreq = strtok(NULL, " ,"); response = remote_unlink(tokenreq); } send(connected,response,4096,0); free(response); close(connected); free((int*)connection); pthread_exit(0); }