Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - AlbertoBSD

#701
Buen dia estoy desarrollando un pequeño servidor en C para un proyecto que tengo.

Ya tengo buena parte trabajado, pero me gustaria consultarles si existen mas cosas que deba de validar en una peticion GET  el ejemplo que mas o menos tengo del codigo es el siguiente:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define KB 1024

int main() {
char *type,*resource,*protocol,*extra,*hasQuery,**values = NULL,*key,*value,*aux;
int values_count= 0,i;
char *temp = malloc(KB);
strcpy(temp,"GET /LALALA/xD.txt?q=xD&XD HTTP/1.1");
type = strtok(temp," ");
resource = strtok(NULL," ");
protocol = strtok(NULL," ");
extra = strtok(NULL," ");
printf("type = %p: %s\n",type,type);
printf("resource = %p: %s\n",resource,resource);
printf("protocol = %p: %s\n",protocol,protocol);
printf("extra = %p\n",extra);
hasQuery = strstr(resource,"?");
if(hasQuery) {
printf("query = %p: %s\n",hasQuery,hasQuery);
aux =  strtok(hasQuery+1,"&");
do {
if(aux) {
values = realloc(values,sizeof(char*)*(values_count+1));
values[values_count] = aux;
printf("values: %s\n",values[values_count]);
values_count++;
}
aux =  strtok(NULL,"&");
}while(aux);
i = 0;
while(i < values_count) {
key = strtok(values[i],"=");
value = strtok(NULL,"");
//Aqui salvo los valores key y value para su posterior uso
printf("Key: %s\nValue: %s\n",key,value);
i++;
}
}
else
printf("query = %p\n",hasQuery);
if(values)
free(values);
if(temp) {
free(temp);
}
}



Estoy releyendo el protocolo del HTTP y estoy validando de momento solo la primera LINEA de la peticion.

Saludos!
#702
Pues riesgos siempre hay, hay algunos exploits que te descargan X malware en el Equipo del usuario. Lo cual seria mala publicidad para tu pagina

Estoy seguro de que debe de existir alguna web que tenga una lista Negra de Equipos, incluso el mismo google te avisa si entras a un sitio malicioso.

Saludos!
#703
Hola excelente codigo, realmente no veo el problema hace tiempo hice un trabajo similar y en mi casi preferi construir mamualmente las variables para el parametro CURLOPT_POSTFIELDS

En mi caso es un pequeño bot para telegram que deje en github.

https://github.com/albertobsd/libtelegrambot/blob/master/telegram.c

El codigo donde realizo mi peticion POST es:

File* telegram_getFile(char *file_id) {
CURL *curl;
CURLcode res;
Response *response = NULL;
File *file = NULL;
char *url = NULL;
char *postdata = NULL;
char *variables[] = {"file_id",NULL};
char *values[] = {file_id,NULL};
int i;
if(file_id){
curl = telegram_curl_init();
url = telegram_makeurl("/getFile");
curl_easy_setopt(curl, CURLOPT_URL, url);
postdata = telegram_build_post(variables,values);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
res = curl_easy_perform(curl);
free(url);
if(res == CURLE_OK) {
response = telegram_parse_response(telegram_buffer,&i);
if(!telegram_error) {
file = telegram_parse_file(response->result,&i);
}
telegram_free_response(response);
telegram_reset_buffer();
}
else {
telegram_set_error("curl_easy_perform() failed!",-1000);
}
free(postdata);
curl_easy_cleanup(curl);
}
else {
telegram_set_error("NULL file_id",-10);
}
return file;
}


Basicamente realizo lo mismo que tu haces pero con menos variables:

curl = telegram_curl_init();
url = telegram_makeurl("/getFile");
curl_easy_setopt(curl, CURLOPT_URL, url);
postdata = telegram_build_post(variables,values);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
res = curl_easy_perform(curl);
free(url);
if(res == CURLE_OK) {


Intenta colocar los CURLOPT_POSTFIELDS como ultima llamada a curl_easy_setopt a ver si es solo cuestion del orden.

Mira el ejemplo del la documentacion oficial:

https://curl.haxx.se/libcurl/c/http-post.html
#704
Si lo que quieres es ordenarlos mientras lo vas guardando de uno en uno, tendrias que modifciar tu funcion guardar, hay algunos algoritmos de ordenamientos excelentes para tu aplicacion. El mas recomendado es el de biblioteca...

La idea basica es abstraer el sistema de Estantes usados en las bibliotecas para acomodar libros, algunos estantes estan llenos y otros a media capacidad Imaginemos que tenemos un sistema de registro (Donde esta el libro con X autor, donde empiezan las palabras con Z etc...)

La idea es por ejemplo, si vas a manejar un unico archivo, (ahorita vacio por el moemento) y llega una registro con la letra A o lo que sea... lo guardas en la posición 0, pero dejas libre la posición 1, esto es:
Tu archivo tendrá actualmente espacio para 2 registros (Posición 0 y posicion 1).

Llega un nuevo registro con la letra B, este lo colocas en la posición 2 y dejas la posicion 3 libre.

Entonces si en algun punto  llega un nuevo registro con la letra A lo agregas en la posición 1, agregas un registro blanco al final y  mueves los demás 1 registro hacia adelante cantidad de posiciones hacia adelante, y asi sucesivamente.

Tambien tendrias que tener un registro que te diga que la letra A empieza en X posicion y la B en tal posicion.

Lo anterior es la idea vaga

Mas info
https://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento

https://es.wikipedia.org/wiki/Library_sort
CitarSupón que un bibliotecario almacene sus libros alfabéticamente en una estante, empezando por la A desde la izquierda, y continuando a la derecha a lo largo del estante sin espacios entre los libros hasta que termine por la Z. Si el bibliotecario adquiere un libro nuevo que pertenece a la sección B, una vez que encuentra el espacio correcto en la sección B, tiene que mover cada libro a partir de ese hasta el último libro en la sección Z para abrir espacio al libro nuevo. Esto es ordenación por inserción. Sin embargo, si dejara un espacio vacío después de cada letra, mientras hubiese un espacio vacío después de B, sólo tuviera que mover unos cuantos libros para poder hubicar el nuevo libro. Esto es el principio básico de Library Sort.
#705
Tengo desde hace varios meses la idea de una Aplicacion para escritorio y Movil con bastantes alcances y aunque ya he avanzado algo, todavía me falta terminar de armar el rompecabezas de Pedasos de código que tengo hasta ahorita.

Tal vez en 2 meses termine y les comparta la aplicación.

Saludos!
#706
Programación C/C++ / Re: error al crear funcion
9 Septiembre 2016, 20:17 PM
Deberias de llamar a la funcion sin los &

velocidadd(inf,x,codigo,&tsg,nom);

Saludos!
#707
No entra al for de la funcion modificar??

Mira he detectado que abres arbitrariamente el archivo.
Lo abres cuando declaras la variable

empleados=fopen("empleados.txt","rb+");

No hay fclose para el primer fopen ademas vuelves a abrir en

if((empleados=fopen("empleados.txt", "rb+"))!=NULL)

Eso puede dar problemas, por que si ya esta abierto por tu programa te puede dar error de lectura al momento de calular el tamaño de tu archivo. (Cantida de registros) y tal vez por eso no entre al for.

Saludos!
#708
Programación C/C++ / Re: Servidor web escrito en C
8 Septiembre 2016, 19:48 PM
Es el mismo sistema y compilador?

Que cambio.

Estoy trabajando en algo similar, pero lo quiero haces mas generico usando una tabla de estados (AUTOMATA) para determinar en que punto de la peticion estoy, ya sea el GET el host, las cookies la conexion entre otros.

Pero mejor no desvio este tema.

Es exactamente el mismo codigo?

Que error te da?

Saludos!
#709
CitarSi tengo unos 15.000 registros cual de los 2 métodos utilizarían, o tal vez haya alguna otra manera más eficiente que desconozco

Si tienes esa cantidad de registros yo utilizaria la primera opcion que dijiste, tener un campo donde este marcado si es registro activo, o eliminado.

El detalle esta en que dado que estas usando registros de longitud variable (Modo texto) y no modo binario es la opcion mas adecuada.

Tendrías que tener un programa adiconal que haga el trabajo pesado (Optimizar la base de datos) quitando los registros marcados como eliminados para NO ocupar mas espacio del necesario.

Con registros binarios (DE LONGITUD FIJA) es mas facil ya que es mas rapido dejar un segmento de X tamaño en ceros (NULL) y posteriormente ocuparlo con alguno de los registros nuevos.

Saludos!
#710
Unix/Unix-Like / Re: ¿Que opinan de FreeBSD?
6 Septiembre 2016, 22:27 PM
Desde el memstick se puede instalar el entorno gráfico

pkg install gnome3

o el kde

Saludos