Beispiel #1
0
wi_string_t * wi_socket_read_to_string(wi_socket_t *socket, wi_time_interval_t timeout, wi_string_t *separator) {
	wi_string_t		*string, *substring;
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(socket->buffer, separator, 0);
	
	if(index != WI_NOT_FOUND) {
		substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
		
		wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));

		return substring;
	}
	
	while((string = wi_socket_read_string(socket, timeout))) {
		if(wi_string_length(string) == 0)
			return string;

		wi_mutable_string_append_string(socket->buffer, string);

		index = wi_string_index_of_string(socket->buffer, separator, 0);
		
		if(index == WI_NOT_FOUND) {
			if(wi_string_length(socket->buffer) > _WI_SOCKET_BUFFER_MAX_SIZE) {
				wi_error_set_libwired_error_with_format(WI_ERROR_SOCKET_OVERFLOW, WI_STR("Buffer is %u bytes"), wi_string_length(socket->buffer));
				
				wi_mutable_string_set_string(socket->buffer, WI_STR(""));
			
				return NULL;
			}
		} else {
			substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
			
			wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));
			
			return substring;
		}
	}
	
	return NULL;
}
Beispiel #2
0
wi_date_t * wi_date_init_with_rfc3339_string(wi_date_t *date, wi_string_t *string) {
    wi_mutable_string_t     *fullstring;
    wi_string_t             *timezone;

    if(wi_string_length(string) >= 19) {
        fullstring  = wi_autorelease(wi_mutable_copy(string));
        timezone    = wi_string_substring_from_index(fullstring, 19);
        
        if(wi_is_equal(timezone, WI_STR("Z"))) {
            wi_mutable_string_delete_characters_in_range(fullstring, wi_make_range(19, 1));

            return wi_date_init_with_string(date, fullstring, WI_STR("%Y-%m-%dT%H:%M:%S"));
        }
        else if(wi_string_length(timezone) == 6) {
            wi_mutable_string_delete_characters_in_range(fullstring, wi_make_range(22, 1));

            return wi_date_init_with_string(date, fullstring, WI_STR("%Y-%m-%dT%H:%M:%S%z"));
        }
    }
    
    wi_release(date);

    return NULL;
}