Example #1
0
static jstring NativeIDN_convertImpl(JNIEnv* env, jclass, jstring s, jint flags, jboolean toAscii) {
    ScopedJavaUnicodeString sus(env, s);
    const UChar* src = sus.unicodeString().getBuffer();
    const size_t srcLength = sus.unicodeString().length();
    UChar dst[256];
    UErrorCode status = U_ZERO_ERROR;
    size_t resultLength = toAscii
            ? uidna_IDNToASCII(src, srcLength, &dst[0], sizeof(dst), flags, NULL, &status)
            : uidna_IDNToUnicode(src, srcLength, &dst[0], sizeof(dst), flags, NULL, &status);
    if (U_FAILURE(status)) {
        jniThrowException(env, "java/lang/IllegalArgumentException", u_errorName(status));
        return NULL;
    }
    if (!toAscii) {
        // ICU only translates separators to ASCII for toASCII.
        // Java expects the translation for toUnicode too.
        // We may as well do this here, while the string is still mutable.
        for (size_t i = 0; i < resultLength; ++i) {
            if (isLabelSeparator(dst[i])) {
                dst[i] = '.';
            }
        }
    }
    return env->NewString(&dst[0], resultLength);
}
Example #2
0
void * clientHandler(void * arg) {
	threadStruct *inArg = (threadStruct *) arg;
	int sockfd = inArg->sockfd;
	free(inArg);

	char *msg = malloc(sizeof(char)*CMD_MAX_SIZE);
	*msg = '\0';
	msgHeader header;
	User user;

	// Agregar usuario
	readBytes(sockfd, (void *) &header,sizeof(header));
	readBytes(sockfd, (void *) msg, header.msgSize);
	cleanString(msg);

	user.sockfd = sockfd;
	strncpy(user.name,msg,NAMES_SIZE);
	*(user.name + NAMES_SIZE -1) = '\0';

	list_append(&Users,(void *) &user);

	// Agregar a la sala default #!

	while (1) {

		// Leer un mensaje del cliente
		readBytes(sockfd, (void *) &header,sizeof(header));
		readBytes(sockfd, (void *) msg, header.msgSize);
		cleanString(msg);

		switch (header.code) {

		case MSG_CODE_SHUT:
			break; // #! NOT DONE

		case MSG_CODE_SAL:
			sal(sockfd);
			break;
		case MSG_CODE_USU:
			usu(sockfd);
			break;
		case MSG_CODE_MEN:
			men(sockfd,msg);
			break;
		case MSG_CODE_SUS:
			sus(sockfd,msg);
			break;
		case MSG_CODE_DES:
			des(sockfd);
			break;
		case MSG_CODE_CRE:
			cre(sockfd,msg);
			break;
		case MSG_CODE_ELI:
			// eli() #!
			break;
		case MSG_CODE_FUE:
			fue(sockfd);
			free(msg);
			pthread_exit(NULL);
			break;
		}

		*msg = '\0';
	}
	return NULL;
}
Example #3
0
void *connection_handler(void *td) {
   int sock = ((Thread_data *) td)->client_sock;
   list subscribed_rooms = ((Thread_data *) td)->subscribed_rooms;	
   char msg[MAX_PACK_SIZE];
   memset(msg, 0, MAX_PACK_SIZE);

   user_data *user = wait_username(rooms, sock);  
   user->subscribed_rooms = subscribed_rooms;
   add(connected_users, user);
   add(subscribed_rooms, rooms->first);	
   int read_size;
   while ((read_size = recv(sock, msg, MAX_PACK_SIZE, 0)) > 0) {
      pthread_mutex_lock(&mutex);
      if (read_size < 3) {
      }
      else if ((strlen(msg) >= 6) &&
					(msg[3] == ' ') && 
					(msg[0] == 's') && (msg[1] == 'u') && (msg[2] == 's')) {
			memmove(msg, msg+4, 252);
			msg[strlen(msg)-1] = '\0';   //replace new line
         sus(msg, user);
      }
      else if ((strlen(msg) == 4) &&
					(msg[0] == 's') && (msg[1] == 'a') && (msg[2] == 'l')) {
         sal(sock);
      } 
      else if ((strlen(msg) >= 6) &&  //because of new line
					(msg[3] == ' ') &&
					(msg[0] == 'm') && (msg[1] == 'e') && (msg[2] == 'n')) {
			memmove(msg, msg+4, 252);
			msg[strlen(msg)-1] = '\0';   //replace new line
         men(user, subscribed_rooms, msg);
      }
      else if ((strlen(msg) == 4) &&
					(msg[0] == 'u') && (msg[1] == 's') && (msg[2] == 'u')) {
         usu(sock); 
      }
      else if ((strlen(msg) == 4) &&
					(msg[0] == 'd') && (msg[1] == 'e') && (msg[2] == 's')) {
         des(subscribed_rooms, user);
      }
      else if ((strlen(msg) >= 6) &&
					(msg[3] == ' ') && 
					(msg[0] == 'c') && (msg[1] == 'r') && (msg[2] == 'e')) {
			memmove(msg, msg+4, 252);
			msg[strlen(msg)-1] = '\0';   //replace new line
         cre(sock, msg);
      }
      else if ((strlen(msg) >= 6) &&
					(msg[3] == ' ') && 	
					(msg[0] == 'e') && (msg[1] == 'l') && (msg[2] == 'i')) {
			memmove(msg, msg+4, 252);
			msg[strlen(msg)-1] = '\0';   //replace new line
         eli(msg, sock, user);
      }
      else if ((strlen(msg) == 4) &&
					(msg[0] == 'f') && (msg[1] == 'u') && (msg[2] == 'e')) {
         fue(subscribed_rooms, user);
      }
      else if ((strlen(msg) == 4) &&
					(msg[0] == 'h') && (msg[1] == 'l') && (msg[2] == 'p')) {
			memset(msg, 0, MAX_PACK_SIZE);
			strcat(msg, "-----------\n");
			strcat(msg, "The valids commands formats are:\n");
			strcat(msg, "sus <room name>\n");
			strcat(msg, "cre <room name>\n");
			strcat(msg, "eli <room name>\n");
			strcat(msg, "sal\n");
			strcat(msg, "usu\n");
			strcat(msg, "des\n");
			strcat(msg, "fue\n");
			strcat(msg, "-----------");
			write(sock, msg, MAX_PACK_SIZE);
      }
		else {
			memset(msg, 0, MAX_PACK_SIZE);
			strcat(msg, "Unrecognized option.");
			strcat(msg, " Try `hlp' for more information.");
			write(sock,	msg, MAX_PACK_SIZE);
		}
      memset(msg, 0, MAX_PACK_SIZE);
      pthread_mutex_unlock(&mutex);
   }
}