Exemplo n.º 1
0
static int do_connecting(void)
{
  struct key csession_secret;
  struct key csession_public;
  struct key tmpkey;
  unsigned backoff = 1;

  saw_seq_gap = 0;
  buffer->rewind();
  key_generate(&csession_secret, &csession_public, keyex);
  make_ini(&csession_public, buffer->peek());
  keylist_exchange_list_key(&tmpkey, &server_publics, &csession_secret);
  auth_start(&cid_authenticator, &tmpkey);

  while (!exitasap) {
    send_packet("INI1", cid_timeout * backoff);
    while (!exitasap) {
      if (poll_both() == 0)
	return STATE_DISCONNECTED;
      if (stdin_ready)
	read_lines();
      if (sock_ready) {
	if (receive_cid(&csession_secret))
	  return STATE_SENDING;
	backoff = 0;
      }
    }
    if (backoff < retransmits)
      ++backoff;
  }
  return STATE_EXITING;
}
Exemplo n.º 2
0
/*
 *	Reads an INI file and returns it as a ini_file object.
 *	If filename is NULL, an empty ini_file object is created and returned.
 */
struct ini_file *ini_read(const char *filename, int *err, int *line) {
	if(line) *line = 0;
	if(!filename) {
		if(err) *err = FILE_CREATED;
		return make_ini();
	} else {	
		char *text = my_readfile(filename);
		if(!text) {
			if(err) *err = NO_SUCH_FILE;
			return NULL;
		}
		struct ini_file * ini = ini_parse(text, err, line);
		free(text);
		return ini;
	}
}
Exemplo n.º 3
0
struct ini_file *ini_parse(const char *text, int *err, int *line) {
	jmp_buf on_error;
	int e_code;
	
	struct ini_file *ini = NULL;
	ini_section *cur_sec = NULL;
	
	const char *tstart, *tend;
	
	int t;
	
	if(err) *err = SUCCESS;
	if(line) *line = 1;
	
	ini = make_ini();
	
	if((e_code = setjmp(on_error)) != 0) {
		if(err) *err = e_code;
		ini_free(ini);
		return NULL;
	}
	
	while((t = get_token(&text, &tstart, &tend, line, on_error)) != T_END) {
		if(t == '[') {
			char *section_name;
			if(get_token(&text, &tstart, &tend, line, on_error) != T_VALUE) {
				longjmp(on_error, EMPTY_SECTION);				
			}
			
			section_name = get_string(tstart, tend, on_error);
			
			cur_sec = add_section(&ini->sections, section_name);
			if(!cur_sec)
				longjmp(on_error, OUT_OF_MEMORY);
			
			if(get_token(&text, &tstart, &tend, line, on_error) != ']') {
				longjmp(on_error, MISSING_END_BRACE);				
			}
			
		} else if (t == T_VALUE ) {
			char *par, *val;
			par = get_string(tstart, tend, on_error);
			t = get_token(&text, &tstart, &tend, line, on_error);
			if(t != '=' && t != ':') {
				longjmp(on_error, EXPECTED_EQUALS);				
			}
			if(get_token(&text, &tstart, &tend, line, on_error) != T_VALUE) {
				longjmp(on_error, EXPECTED_VALUE);
			}
			val = get_string(tstart, tend, on_error);
			
			if(cur_sec)
				add_pair(cur_sec, par, val);
			else {
				/* Add the parameter and value to the INI file's globals */
				ini_pair *pair;
				if(!(pair = malloc(sizeof *pair)))
					longjmp(on_error, OUT_OF_MEMORY);
				
				pair->param = par;
				pair->value = val;
				
				pair->left = pair->right = NULL;
					
				if(!ini->globals)
					ini->globals = pair;
				else
					insert_pair(ini->globals, pair);
			}
			
			
		} else 
			longjmp(on_error, EXPECTED_PARAMETER);
	}
	
	return ini;
}