Beispiel #1
0
void
load_log(void)
{
  FILE *f;
  char *p;
  char temp[256],aux[256];
  GList *pt;
  struct logentry *le;

  if (users)
    g_list_free(users);
  if (isps)
    g_list_free(isps);
  users=NULL;
  isps=NULL;

  users=g_list_append(users,"All users");
  isps=g_list_append(isps,"All ISPs");

  p=getenv("HOME");
  sprintf(temp,"%s/.yawmppp2/logfile",p);

  if (log)
    free_log();

  f=fopen(temp,"r");
  if (!f)
    return;

  while(fgets(aux,255,f))
    prepend_log_entry(aux);

  fclose(f);

  for(pt=log;pt!=NULL;pt=g_list_next(pt)) {
    le=(struct logentry *)(pt->data);

    if (!already_exists(le->user,users)) {
      users=g_list_append(users,(gpointer)(le->user));
    }

    if (!already_exists(le->shortname,isps))
      isps=g_list_append(isps,(gpointer)(le->shortname));
  }
}
Beispiel #2
0
int	is_label(t_data *data, int addr, char *buff)
{
  int	ref;

  ref = (addr + data->curs_line) % 0x1000;
  if (!is_correct_ref(data, addr, ref))
    return (0);
  if (!already_exists(data, ref, buff))
    {
      if (add_label(data, ref, buff, addr) == 1)
	return (0);
    }
  return (1);
}
Beispiel #3
0
void* init_chat(void* in){

  int ret;

  Params* parameters= (Params*) malloc(sizeof(Params));
  parameters= (Params*) in;

  int descriptor= parameters->descriptor;
  char address[INET_ADDRSTRLEN];
  char buffer[BUFFER_SIZE];

  snprintf(address,sizeof(address),"%s",parameters->address);
  snprintf(buffer,sizeof(buffer),"%s\n",WELCOME_MESSAGE);

  do{
    ret= send_message(descriptor,buffer,NULL);
    ret= receive_message(descriptor,buffer);
    if(buffer[0]=='\n' || strlen(buffer)==0 || strlen(buffer)>USERNAME_LENGTH)
    snprintf(buffer,sizeof(buffer),"%s\n","Not valid username! It has to be at least 1 character and at last 20 characters long\n");
    else if(strcmp(buffer,QUIT_COMMAND)==0){
      send_message(descriptor,QUIT_INIT,strlen(QUIT_INIT));
      ERROR_HELPER(ret,"error with sem_post in init_chat");
      pthread_exit(NULL);
    }
    else break;
  } while(1);

  User* tmp_us= createUser(buffer,descriptor,address);
  ret=add_lastUser(tmp_us);

  if(ret==-1){
    snprintf(buffer,sizeof(buffer),"%s","Chat is full.Try again later :(");
    send_message(descriptor,buffer,strlen(buffer));
    close(descriptor);
    pthread_exit(NULL);
  }

  printf("Utente %s creato e ret è %d\n", users[ret]->username,ret);

  while(1){
    int user_input= choose_operation(tmp_us);
    ERROR_HELPER(user_input,"errore choose operation");

    switch (user_input) {
      case 0:
        print_stats_users();
        Channel* tmp_ch=join_chat(tmp_us);
        ret= sem_post(&channels_sem);
        ERROR_HELPER(ret,"error on sem_post to channels_sem");

        print_stats_channels();
        if(tmp_ch==NULL){
          ERROR_HELPER(ret,"error on sem_post to channels_sem");

          break;
        }
        snprintf(buffer,sizeof(buffer),"%s","You joined the chat. Type and press ENTER to send messages to the others!\n");
        send_message(descriptor,buffer,NULL);
        memset(buffer,0,sizeof(buffer));
        snprintf(buffer,BUFFER_SIZE,"%s joined the chat\n",tmp_us->username);
        send_all(tmp_ch,tmp_us,buffer);
        chat_handler(tmp_ch,tmp_us);
        break;

      case 1:

        memset(buffer,0,sizeof(buffer));
        snprintf(buffer,sizeof(buffer),"%s","\nType the name of your new chat.:\n");
        do{
          ret= send_message(descriptor,buffer,NULL);
          ret= receive_message(descriptor,buffer);
          if(buffer[0]=='$'){
            ret=cmd_check(buffer,tmp_us);
            if(ret==QUIT_RET) break;
          }
        }
        while(already_exists(buffer));
        if(ret==QUIT_RET) break;
        Channel* temp_ch= createChannel(buffer, tmp_us);
        printf("canale %s creato e l'admin è %d\n", temp_ch->channel_name, temp_ch->admin);
        memset(buffer,0,sizeof(buffer));
        snprintf(buffer,sizeof(buffer),"%s","\nYou are in your new chat. Type and press ENTER to send messages to the others!\n\n");
        ret= send_message(descriptor,buffer,NULL);
        memset(buffer,0,sizeof(buffer));

        Channel* last_channel= add_lastChannel(temp_ch,tmp_us);
        if(last_channel==NULL){
          snprintf(buffer,sizeof(buffer),"%s","Chat are full right now. Do you want to continue using the chat? (y/n) ");
          send_message(descriptor,buffer,strlen(buffer));
          break;
        }

        chat_handler(last_channel,tmp_us);
        break;
      case 2:
        memset(buffer,0,sizeof(buffer));
        snprintf(buffer,sizeof(buffer),"%s",QUIT_INIT);
        send_message(tmp_us->socket,buffer,strlen(buffer));
        delete_user_from_users(tmp_us->socket);
        pthread_exit(NULL);
        break;
    }
    do{
      ret= receive_message(descriptor,buffer);
      if(strlen(buffer)==1){
        if(buffer[0]=='n'){
          send_message(descriptor,QUIT_INIT,strlen(QUIT_INIT));
          delete_user_from_users(descriptor);
          pthread_exit(NULL);
        }
        if(buffer[0]=='y') break;
      }
      snprintf(buffer,sizeof(buffer),"%s","Invalid input: choose between y or n!\n");
      send_message(descriptor,buffer,strlen(buffer));
    }while(1);
  }
  send_message(descriptor,QUIT_INIT,strlen(QUIT_INIT));
  delete_user_from_users(descriptor);
  pthread_exit(NULL);
}
static DBusMessage *create_connection(DBusConnection *conn,
						DBusMessage *msg, void *data)
{
	struct pending_reply *pr;
	const char *addr;
	const char *str;
	bdaddr_t src;
	uint16_t id;
	int dev_id, err;
	char key[32];
	GSList *l;
	uuid_t uuid;

	if (dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &addr,
			DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID) == FALSE)
		return NULL;

	id = bnep_service_id(str);
	if (id != BNEP_SVC_GN && id != BNEP_SVC_NAP && id != BNEP_SVC_PANU)
		return not_supported(msg);

	snprintf(key, 32, "%s#%s", addr, bnep_name(id));

	/* Checks if the connection was already been made */
	for (l = connection_paths; l; l = l->next) {
		if (connection_find_data(l->data, key) == 0)
			return already_exists(msg);
	}

	bacpy(&src, BDADDR_ANY);
	dev_id = hci_get_route(&src);
	if (dev_id < 0 || hci_devba(dev_id, &src) < 0)
		return adapter_not_available(msg);

	pr = g_new0(struct pending_reply, 1);

	/* FIXME just to maintain compatibility */
	pr->adapter_path = g_strdup_printf("/org/bluez/hci%d", dev_id);
	if (!pr->adapter_path) {
		pending_reply_free (pr);
		return adapter_not_available(msg);
	}

	pr->conn = dbus_connection_ref(conn);
	pr->msg = dbus_message_ref(msg);
	bacpy(&pr->src, &src);
	str2ba(addr, &pr->dst);
	pr->addr = g_strdup(addr);
	pr->id = id;
	pr->path = g_new0(char, MAX_PATH_LENGTH);
	snprintf(pr->path, MAX_PATH_LENGTH,
				NETWORK_PATH "/connection%d", net_uid++);

	sdp_uuid16_create(&uuid, pr->id);
	err = bt_search_service(&pr->src, &pr->dst, &uuid, records_cb, pr,
				NULL);
	if (err < 0) {
		pending_reply_free(pr);
		return not_supported(msg);
	}

	return NULL;
}