<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jose Solares &#187; article</title>
	<atom:link href="http://chema.solaresmaldonado.com/tag/article/feed" rel="self" type="application/rss+xml" />
	<link>http://chema.solaresmaldonado.com</link>
	<description>Dream as if you&#039;ll live forever, Live as if you&#039;ll die today.</description>
	<lastBuildDate>Tue, 06 Sep 2011 18:04:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Una pequeña prueba</title>
		<link>http://chema.solaresmaldonado.com/blog/164/una-pequena-prueba/</link>
		<comments>http://chema.solaresmaldonado.com/blog/164/una-pequena-prueba/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 22:12:50 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/164/una-pequena-prueba/</guid>
		<description><![CDATA[Esto es una peque&#195;&#177;a prueba desde blogwriter en el iphone. A ver que tal funciona con textpattern.]]></description>
			<content:encoded><![CDATA[<p>Esto es una peque&Atilde;&plusmn;a prueba desde blogwriter en el iphone. A ver que tal funciona con textpattern.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/blog/164/una-pequena-prueba//feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como utilizar librerias adicionales en VC++ 2005</title>
		<link>http://chema.solaresmaldonado.com/blog/22/utilizando-librerias-vc-2005/</link>
		<comments>http://chema.solaresmaldonado.com/blog/22/utilizando-librerias-vc-2005/#comments</comments>
		<pubDate>Tue, 15 Nov 2005 11:00:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[visualstudio]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/22/utilizando-librerias-vc-2005/</guid>
		<description><![CDATA[Agregar librerias adicionales a Visual C++ 2005.]]></description>
			<content:encoded><![CDATA[<p>Despues de hacerlo es realmente facil, pero la documentacion existente en linea es cercana a nada.</p>

<p>Supongamos que tenemos un <span class="caps">SDK </span>que queremos utilizar en VC++, en mi caso queria desarrollar una aplicacion con soporte para Avaya <span class="caps">CTI, </span>al instalar el <span class="caps">SDK </span>de <span class="caps">TSAPI </span>de avaya, tenemos los dos directorios que nos interesan, Hdrs donde estan todos las librerias a incluir, y Libs donde estan los archivos a incluir en la compilacion.</p>

<p>Podemos hacer 2 cosas.</p>

<p>1. Copiarlos a los directorios estandares de Visual C++<br />
2. Agregarlos al proyecto, e incluir el directorio Libs en las opciones de compilacion.</p>

<p>Para la opcion 1:<br />
Tendriamos que copiar los *.h que tenemos al directorio Program Files\Microsoft Visual Studio 8\VC\include</p>

<p>los *.bin en el directorio Program Files\Microsoft Visual Studio 8\VC\lib</p>

<p>Luego en las propiedades de nuestro proyecto, en Configuration Properties -&gt; Linker -&gt; Input, en Additional dependencies debemos agregar en el caso de los <span class="caps">TSAPI </span>csta32.lib y attprv32.lib.</p>

<p>Y simplemente agregamos #include <myarchivo.h> donde querramos utilizar la libreria nueva.</p>

<p>Para la opcion 2:<br />
Agregar todos los .h a nuestro proyecto, Agregar el directorio donde estan los .lib en Linker -&gt; General, Additional Library Directories, y tambien agregar los .lib en las dependencias adicionales.</p>

<p>La ventaja de la opcion 1 es que si necesitamos desarrollar varias aplicaciones utilizando este <span class="caps">SDK </span>unicamente debemos de agregarlo en Additional dependencies, sin tener que estar agregando cada .h a nuestro proyecto.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/blog/22/utilizando-librerias-vc-2005//feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Codigo de Ejemplo para Servidor RDT</title>
		<link>http://chema.solaresmaldonado.com/linux/12/codigo-de-server-rdt/</link>
		<comments>http://chema.solaresmaldonado.com/linux/12/codigo-de-server-rdt/#comments</comments>
		<pubDate>Thu, 02 Jun 2005 01:30:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[avaya]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[RDT]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/12/codigo-de-server-rdt/</guid>
		<description><![CDATA[Codigo de Ejemplo para una implementacion de un servidor con el protocolo RDT]]></description>
			<content:encoded><![CDATA[<strong>Nota:</strong>Este codigo esta hecho para usar blocking I/O de sockets, para utilizar non blocking I/O debemos utilizar libevent, eso esta fuera del ambito de este codigo. Y asume que ya tenemos al servidor &#8220;escuchando&#8221; en un puerto y que ya aceptamos la conexion de un cliente `cliente_socket`.<br />
<p>


<pre>
<code>
char buffer[RCVBUFFER + 2];
buffer[RCVBUFFER] = 0;
char response[] = {2,6,1,0,7,1,0,2,1,6,0x81};
int  message_size,i,j;
char counter = 0;

if (( message_size = recv(client_socket, buffer,
        RCVBUFFER, 0)) &amp;lt; 0 )
   err_handler (&quot;recv() failed&quot;);

if ( message_size == 17 ) {
   if ( send(client_socket, response, 11, 0) != 11 )
      err_handler (&quot;send() failed&quot;);
} else {
   printf ( &quot;- %d - \n&quot;, message_size );
   err_handler (&quot;Protocol Error&quot;);
}

printf (&quot;Starting...\n&quot;);

for (;;) {
   if (( message_size = recv(client_socket, buffer,
         RCVBUFFER, 0)) &amp;lt; 0 )
      err_handler (&quot;recv() failed&quot;);
   counter = ( buffer&amp;#91;0] &amp;#61;= -128
             &amp;amp;&amp;amp; message_size &amp;gt; 5 )? buffer&amp;#91;3] : counter;
   i = (buffer&amp;#91;0] &amp;#61;= -128)? 5 : 0;
   buffer[message_size + 1] = '\0';
   buffer[message_size] = '\n';

   //printf (&quot;Capturing %d bytes\n&quot;,message_size);
   fprintf (stderr, &quot;%s&quot;,&amp;amp;buffer&amp;#91;i]);
   //printf (&quot;Current Counter : %d\n&quot;,counter);

   if (message_size == 1) {
       if (buffer&amp;#91;0] &amp;#61;= 0x50) {
          char respond[] = {0x51};
          if ( send (client_socket, respond, 1, 0) != 1)
          err_handler(&quot;send() failed&quot;);
      }
   } else {
      i = message_size - 1;
      if (buffer[i-2] &amp;#61;= 0x20 &amp;amp;&amp;amp; buffer[i-1] &amp;#61;= 0x0d &amp;amp;&amp;amp;
          buffer[i] &amp;#61;= 0x0a) {
         char respond[] = {0x40, 0x05, 0x01, ++counter, 0x81};
         if ( send (client_socket, respond, 5, 0) != 5 )
            err_handler(&quot;send() failed&quot;);
      }
   }
/* Do Something with the Data we received */
}
</code>
</pre>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/12/codigo-de-server-rdt//feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Draft del Protocolo RDT</title>
		<link>http://chema.solaresmaldonado.com/linux/11/draft-del-protocolo-rdt/</link>
		<comments>http://chema.solaresmaldonado.com/linux/11/draft-del-protocolo-rdt/#comments</comments>
		<pubDate>Thu, 02 Jun 2005 01:21:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[avaya]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[RDT]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/11/draft-del-protocolo-rdt/</guid>
		<description><![CDATA[Draft del Protocolo de Avaya RDT como es utilizado por RDTT (Reliable Data Transport Tool), hecho utilizando ingeneria reversa con ethereal y analizando los paquetes.]]></description>
			<content:encoded><![CDATA[<h2>Draft del Protocolo de Avaya <acronym title="Reliable Data Transport">RDT</acronym><br />
Como es utilizado en <acronym title="Reliable Data Transport Tool">RDTT</acronym></h2>

<p class="justify" style="text-align:justify">No encontre ninguna aplicaci&oacute;n en linux que pudiera utilizar para un proyecto en el trabajo, por lo que armado de ethereal y <acronym title="Reliable Data Transport Tool">RDTT</acronym> en Windows hize una <em>ingenieria reversa</em></p>

<p>Esta especificacion caracteriza a un Server de <acronym title="Reliable Data Transport">RDT</acronym> ver codigo de ejemplo <a href="http://chema.solaresmaldonado.com/index.php?id=12">aca</a> </p>

<p class="justify" style="text-align:justify">Para iniciar una conexion el cliente de <acronym title="Reliable Data Transport">RDT</acronym> nos envia un paquete de 17 bytes, para seguir recibiendo datos que el cliente nos enviara debemos responder con :</p>

<blockquote><p>byte response[] = {2, 6, 1, 0, 7, 1, 0, 2, 1, 6, 0&#215;81};</p></blockquote>

<p>Luego recibimos los datos:</p>

<blockquote><p>definimos un checksum que el cliente espera recibir de la siguiente manera :<br />
( buffer[ 0 ] = = -128 &#038;&amp; msize &gt; 5 )?buffer[ 3 ]:0;<br />
o<br />
( buffer[ 0 ] = = 0&#215;80 &#038;&amp; msize &gt; 5 )?buffer[ 3 ]:0;<br />
dependiendo del OS que utilicemos.</p></blockquote>

<blockquote><p><em>buffer es char * donde recibimos  la data con recv o read</em><br />
<em>msize es int donde tenemos la cantidad de bytes leidos</em></p></blockquote>

<blockquote><p>el checksum lo enviamos al cliente al recibir `200d0a` al final de un paquete utlizando una respuesta char[]<br />
{0&#215;40, 0&#215;05, 0&#215;01, ++checksum, 0&#215;81};</p></blockquote>

<blockquote><p><acronym title="Reliable Data Tranport">RDT</acronym> tiene algo similar al ping de <acronym title="Internet Relay Chat">IRC</acronym>, periodicamente nos envia un paquete de 1 byte con 0&#215;50, esperando que le enviemos un paquete de 1 byte con 0&#215;51</p></blockquote>

<p>Espero que les sirva esta informaci&oacute;n</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/11/draft-del-protocolo-rdt//feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WaitForSound para Asterisk</title>
		<link>http://chema.solaresmaldonado.com/asterisk/2/waitforsound/</link>
		<comments>http://chema.solaresmaldonado.com/asterisk/2/waitforsound/#comments</comments>
		<pubDate>Tue, 08 Mar 2005 20:41:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/2/waitforsound/</guid>
		<description><![CDATA[Codigo fuente de la aplicacion WaitForSound, esta modulo extra para asterisk nos permite detectar voz, ya que para la ejecucion hasta que encuentra voz/sonido.

Esta basada en la aplicacion WaitForSilence que esta en el cvs HEAD de asterisk.]]></description>
			<content:encoded><![CDATA[<p><a href="http://chema.solaresmaldonado.com/files/code/app_waitforsound.c">Aplicacion WaitForSound</a></p>

<p>Para hacer uso de esta aplicacion en asterisk <strong>es necesario</strong> bajarla al directorio apps en el source de asterisk, tambien se debe modificar el Makefile de dicho directorio para que incluya esta aplicacion, puede ser util tambien la aplicacion WaitForSilence que esta incluida en la version <span class="caps">HEAD </span>del cvs de asterisk.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/asterisk/2/waitforsound//feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encripcion TripleDES</title>
		<link>http://chema.solaresmaldonado.com/blog/3/encripcion-tripledes/</link>
		<comments>http://chema.solaresmaldonado.com/blog/3/encripcion-tripledes/#comments</comments>
		<pubDate>Tue, 08 Mar 2005 02:14:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[Encripcion]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[TripleDES]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/3/encripcion-tripledes/</guid>
		<description><![CDATA[Clase para Encripcion en C# utilizando TripleDES Esta clase funciona en VS.NET 2003, se puede modificar para utilizar otro tipo de encripcion, seria de modificar el constructor para cambiar que tipo de encripcion se desea utilizar.]]></description>
			<content:encoded><![CDATA[<p><a href="http://chema.solaresmaldonado.com/files/code/encryption.html">Clase para Encripcion en C# utilizando TripleDES</a></p>

<p>Esta clase funciona en <span class="caps">VS.NET</span> 2003, se puede modificar para utilizar otro tipo de encripcion, seria de modificar el constructor para cambiar que tipo de encripcion se desea utilizar.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/blog/3/encripcion-tripledes//feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

