<?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; Linux</title>
	<atom:link href="http://chema.solaresmaldonado.com/category/linux/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>Mon, 07 Jun 2010 04:44:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>El Futuro es ahora</title>
		<link>http://chema.solaresmaldonado.com/asterisk/149/el-futuro-es-ahora/ </link>
		<comments>http://chema.solaresmaldonado.com/asterisk/149/el-futuro-es-ahora/ #comments</comments>
		<pubDate>Tue, 28 Aug 2007 00:39:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/149/el-futuro-es-ahora/ </guid>
		<description><![CDATA[Ya tenemos en nuestras manos la IP04, y como dice el titulo, el futuro es ahora, esta planta (pbx) esta basada enteramente en lo que se conoce como codigo libre/open source ya que tanto las especificaciones del hardware como el codigo del software que corre estan disponibles para cualquiera que quisiera hacer uso de los [...]]]></description>
			<content:encoded><![CDATA[<p>Ya tenemos en <a href="http://www.codevoz.com">nuestras</a> manos la <span class="caps">IP04, </span>y como dice el titulo, el futuro es ahora, esta planta (pbx) esta basada enteramente en lo que se conoce como codigo libre/open source ya que tanto las especificaciones del hardware como el codigo del software que corre estan disponibles para cualquiera que quisiera hacer uso de los mismos.</p>

<p>Cuenta con 256MB de memoria flash, 64MB de <span class="caps">RAM </span>y un procesador blackfin <span class="caps">BF532 </span>de 400MHz.</p>

<p>Corre <a href="http://www.linux.org">Linux</a> y la telefonia esta a cargo de <a href="http://www.asterisk.org">Asterisk</a></p>

<p>De esto es de lo que somos capaces cuando decidimos compartir.</p>

<p><a href="/images/138.jpg"><img src="/images/138t.jpg" alt="" /></a>
<a href="/images/139.jpg"><img src="/images/139t.jpg" alt="" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/asterisk/149/el-futuro-es-ahora/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Munin</title>
		<link>http://chema.solaresmaldonado.com/linux/79/munin/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/79/munin/ #comments</comments>
		<pubDate>Mon, 08 May 2006 05:37:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/79/munin/ </guid>
		<description><![CDATA[Qu&#233; es Munin?

En Mitolog&#237;a N&#243;rdica es uno de los cuervos del dios Odin. Significa Memoria.

En el &#225;mbito de la tecnolog&#237;a es una herramienta que utiliza rrd para almacenar y graficar varios datos del equipo en el que lo utilicemos.

Tiene plugins para poder graficar la cantidad de accesos a nuestro servidor apache por ejemplo. o para [...]]]></description>
			<content:encoded><![CDATA[<p>Qu&eacute; es <a href="http://munin.projects.linpro.no/">Munin</a>?</p>

<p>En Mitolog&iacute;a N&oacute;rdica es uno de los cuervos del dios Odin. Significa Memoria.</p>

<p>En el &aacute;mbito de la tecnolog&iacute;a es una herramienta que utiliza rrd para almacenar y graficar varios datos del equipo en el que lo utilicemos.</p>

<p>Tiene plugins para poder graficar la cantidad de accesos a nuestro servidor apache por ejemplo. o para ver cuantos canales de nuestro servidor asterisk est&aacute;n en uso.</p>

<p>Utiliza una arquitectura maestro/nodo, en el cual el maestro es el que se encarga de almacenar la informaci&oacute;n que lee peri&oacute;dicamente de los nodos.</p>

<p>La instalaci&oacute;n y configuraci&oacute;n son relativamente f&aacute;ciles si estamos utilizando debian.</p>

<blockquote><p>apt-get install munin munin-node</p></blockquote>

<p>Este simple comando nos instalara lo necesario en la maquina maestra.</p>

<p>Luego debemos editar los archivos de configuraci&oacute;n para agregar nodos e indicar el directorio hacia cual vamos a generar el html.</p>

<blockquote><p>dbdir /var/lib/munin<br />
htmldir /var/www/munin<br />
logdir /var/log/munin<br />
rundir /var/run/munin<br />
tmpldir /etc/munin/templates<br />
<br/>[www.myserver.com]<br />
address 127.0.0.1<br />
use_node_name yes<br />
<br/>[www.myotherserver.com]<br />
address 10.0.0.1<br />
user_node_name yes</p></blockquote>

<p>Luego simplemente necesitamos reiniciar el servicio de munin.</p>

<blockquote><p>/etc/init.d/munin-node restart</p></blockquote>

<p>Munin actualiza la informaci&oacute;n cada 5 minutos, luego de un tiempo de ejecuci&oacute;n terminaremos con graf&iacute;cas como estas:</p>

<p><a href="http://chema.solaresmaldonado.com/images/41.png"><img src="http://chema.solaresmaldonado.com/images/41t.png" alt="" /></a></p>

<p><a href="http://chema.solaresmaldonado.com/images/42.png"><img src="http://chema.solaresmaldonado.com/images/42t.png" alt="" /></a></p>

<p><a href="http://chema.solaresmaldonado.com/images/43.png"><img src="http://chema.solaresmaldonado.com/images/43t.png" alt="" /></a></p>


<p>Para lograr instalar munin en slackware utilic&eacute; los rpm&#8217;s que estan para suse10, los converti a tgz con rpm2tgz y los instal&eacute; en slackware. Luego tuve que crear un script de arranque especifico para slackware. Tambi&eacute;n tuve que crear los links simbolicos de los plugins que deseaba utilizar e instalar algunos paquetes de perl para que funcionaran.</p>

<p>Lo anterior no lo detallo mucho, ya que cualquiera que haya instalado un servidor slackware para ofrecer servicios en producci&oacute; sabra como realizar lo anterior.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/79/munin/ /feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sun Niagara</title>
		<link>http://chema.solaresmaldonado.com/linux/60/sun-niagara/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/60/sun-niagara/ #comments</comments>
		<pubDate>Sun, 19 Feb 2006 05:27:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[niagara]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/60/sun-niagara/ </guid>
		<description><![CDATA[Dave Miller ya logro arrancar al Sun Niagara utilizando el kernel de linux, este reconoce los 8 cores como 32 cpu&#8217;s. Esto ya que cada core consta de 4 threads de ejecuci&#243;n. Esto en una maquina con un solo procesador, a ver que tantos de estos mete Sun en una sola maquina.

Como podemos ver cada [...]]]></description>
			<content:encoded><![CDATA[<p class="justify" style="text-align:justify"><a href="http://vger.kernel.org/~davem/cgi-bin/blog.cgi/">Dave Miller</a> ya logro arrancar al Sun <a href="http://arstechnica.com/news.ars/post/20051114-5569.html">Niagara</a> utilizando el kernel de linux, este reconoce los 8 cores como 32 cpu&#8217;s. Esto ya que cada core consta de 4 threads de ejecuci&oacute;n. Esto en una maquina con un solo procesador, a ver que tantos de estos mete Sun en una sola maquina.</p>

<p class="justify" style="text-align:justify">Como podemos ver cada thread da un promedio de 300 bogomips, siendo 32 resultan en aproximadamente 9600 por el <span class="caps">CPU </span>entero, 3000 mas que nuestro Xeon de 3.0ghz. Es lo mejor en cpu que podemos conseguir si utilizamos aplicaciones con paralelismo.</p>

<p class="justify" style="text-align:justify">Como por ejemplo Apache, lo unico malo es el bajo desempe&ntilde;o de punto flotante. Espero tener la oportunidad de verlo de cerca y talvez migrar nuestros servers de hosting hacia esto.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/60/sun-niagara/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>inodes</title>
		<link>http://chema.solaresmaldonado.com/linux/49/inodes/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/49/inodes/ #comments</comments>
		<pubDate>Sat, 04 Feb 2006 05:45:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/49/inodes/ </guid>
		<description><![CDATA[Hoy me toco a mi sufrir por los benditos inodes en una particion ext3. Asumimos que el tama&#241;o de los archivos en promedio seria cercano a los 4mb. por lo que se creo el filesystem acorde. Ah pero no, hay una inmensa cantidad de archivos menores incluso a 1mb, por lo que tenemos la particion [...]]]></description>
			<content:encoded><![CDATA[<p class="justify" style="text-align:justify">Hoy me toco a mi sufrir por los benditos inodes en una particion ext3. Asumimos que el tama&ntilde;o de los archivos en promedio seria cercano a los 4mb. por lo que se creo el filesystem acorde. Ah pero no, hay una inmensa cantidad de archivos menores incluso a 1mb, por lo que tenemos la particion a uso de 50% en capacidad pero sin inodes&#8230;</p>

<p>A mover 80Gb de archivitos&#8230;</p>

<p>Como seria en ingles, Assume, making an <span class="caps">ASS </span>out of U and <span class="caps">ME.</span></p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/49/inodes/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kernel 2.6.15</title>
		<link>http://chema.solaresmaldonado.com/linux/39/kernel-2615/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/39/kernel-2615/ #comments</comments>
		<pubDate>Wed, 04 Jan 2006 02:41:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/39/kernel-2615/ </guid>
		<description><![CDATA[Ya esta disponible la version 2.6.15 del kernel la cual pueden descargar de kernel.org pueden ver el historial de cambios aqu&#237; uno de los cambios mas interesantes es mejor soporte para escrituras en particiones NTFS, lo que significa que ahora si podemos editar archivos en particiones NTFS y borrar o agregar informacion, pero lastimosamente todavia [...]]]></description>
			<content:encoded><![CDATA[<p class="justify" style="text-align:justify">Ya esta <a href="http://lkml.org/lkml/2006/1/2/192">disponible</a> la version 2.6.15 del kernel la cual pueden descargar de <a href="http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.15.bz2">kernel.org</a> pueden ver el historial de cambios <a href="http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.15">aqu&iacute;</a> uno de los cambios mas interesantes es mejor soporte para escrituras en particiones <span class="caps">NTFS, </span>lo que significa que ahora si podemos editar archivos en particiones <span class="caps">NTFS </span>y borrar o agregar informacion, pero lastimosamente todavia no se pueden crear/borrar archivos/directorios en la particion, pero que buen avance.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/39/kernel-2615/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KDE 3.5 en SuSE Linux 10 para VMWare</title>
		<link>http://chema.solaresmaldonado.com/linux/38/kde-35-en-suse-linux-10-para-vmware/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/38/kde-35-en-suse-linux-10-para-vmware/ #comments</comments>
		<pubDate>Tue, 03 Jan 2006 04:40:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[osnews]]></category>
		<category><![CDATA[suse]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/38/kde-35-en-suse-linux-10-para-vmware/ </guid>
		<description><![CDATA[Desde OSNEWS nos llegan noticias de una imagen para usar con el VMWare player de SuSE Linux 10, el cual tiene ya actualizado KDE a la version 3.5, lo pueden encontrar aqu&#237;.

VMWare player es una version gratuita que podemos utilizar para ejecutar maquinas virtuales creadas con VMWare.]]></description>
			<content:encoded><![CDATA[<p>Desde <a href="http://www.osnews.com/comment.php?news_id=13155"><span class="caps">OSNEWS</span></a> nos llegan noticias de una imagen para usar con el <a href="http://www.vmware.com/products/player/"><span class="caps">VMW</span>are player</a> de <a href="http://developer.kde.org/~binner/vmware/">SuSE Linux 10</a>, el cual tiene ya actualizado <span class="caps">KDE </span>a la version 3.5, lo pueden encontrar <a href="http://developer.kde.org/~binner/vmware/">aqu&iacute;</a>.</p>

<p><a href="http://www.vmware.com/products/player/"><span class="caps">VMW</span>are player</a> es una version gratuita que podemos utilizar para ejecutar maquinas virtuales creadas con <span class="caps">VMW</span>are.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/38/kde-35-en-suse-linux-10-para-vmware/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sample Code for RDT Server</title>
		<link>http://chema.solaresmaldonado.com/linux/14/sample-code-for-rdt-server/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/14/sample-code-for-rdt-server/ #comments</comments>
		<pubDate>Thu, 02 Jun 2005 02:36:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[english]]></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/14/sample-code-for-rdt-server/ </guid>
		<description><![CDATA[This is sample code implementating the RDT Protocol described before.]]></description>
			<content:encoded><![CDATA[<p>
<b>Note:</b>This code expects to be using sockets blocking I/O request, to use non blocking I/O we should use libevent or a similar solution (like threads), this is outside of the scope of this code. It also assumes that we already have the server listening on a port and that we have already accepted a client connection `cliente_socket`. <span class="caps">RCVBUFFER </span>is 256.<br />
<p>


<pre>
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)) &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)) &lt; 0 )
      err_handler (&quot;recv() failed&quot;);

   if (message_size &gt; 5 &amp;amp;&amp;amp; bufer[0] == -128)
      counter = buffer[3];
   i = (buffer[0] == -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[i]);
   //printf (&quot;Current Counter : %d\n&quot;,counter);

   if (message_size == 1) {
       if (buffer[0] == 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] == 0x20 &amp;amp;&amp;amp; buffer[i-1] == 0x0d &amp;amp;&amp;amp; 
          buffer[i] == 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 */
}
</pre>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/14/sample-code-for-rdt-server/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The RDT Protocol</title>
		<link>http://chema.solaresmaldonado.com/linux/13/the-rdt-protocol/ </link>
		<comments>http://chema.solaresmaldonado.com/linux/13/the-rdt-protocol/ #comments</comments>
		<pubDate>Thu, 02 Jun 2005 02:30:00 +0000</pubDate>
		<dc:creator>Jose Solares</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://chema.solaresmaldonado.com/1/13/the-rdt-protocol/ </guid>
		<description><![CDATA[This is a draft of the RDT Protocol as Implemented by the Avaya Reliable Data Tranport Tool, which is used to collect CDR from the Definity System among other things.

I'll be showing you code to implement this protocol.]]></description>
			<content:encoded><![CDATA[<h2>Draft of the Avaya <acronym title="Reliable Data Transport">RDT</acronym> Protocol as it&#8217;s used in <acronym title="Reliable Data Transport Tool">RDTT</acronym></h2>

<p class="justify" style="text-align:justify">As i didnt find any <acronym title="GNU Is not Unix">GNU</acronym>/Linux Applications that could speak <span class="caps">RDT </span>and i had a need for a proyect at work, armed with ethereal and <acronym title="Reliable Data Transport Tool">RDTT</acronym> i did a <em>reverse engineering</em> of the packets captured, this is what i learned of <span class="caps">RDT.</span></p>

<p>This Draft specifies a Server, see example code using this information <a href="http://chema.solaresmaldonado.com/index.php?id=14">here</a> </p>

<p class="justify" style="text-align:justify">When we start listening the <acronym title="Reliable Data Transport">RDT</acronym> client sends us a 17 byte packet, albeit it has a distinct structure from other packets received, at no other time did i get a 17 byte packet in all the time i captured packets so i just send a response when i receive 17 bytes, in order to start receiving the data we want, we need to send back a response:</p>

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

<p>Just then do we start receiving the data:</p>

<p>We define a checksum-like number that the client expects to get back so it knows that we have indeed received the data :</p>



<pre>
( buffer[ 0 ] == -128 &amp;amp;&amp;amp; msize &gt; 5 )?buffer[ 3 ]:0;
or
( buffer[ 0 ] == 0x80 &amp;amp;&amp;amp; msize &gt; 5 )?buffer[ 3 ]:0;
</pre>


<p>depending on the OS and data types you want to use</p>

<p><em>buffer is a char * where we store the data received with functions recv o read</em><br />
<em>msize is an int where recv/read return the quantity of data read</em></p>

<p>We send the above checksum when we get a `200d0a` at the end of a packet, using a char[]<br />
{0&#215;40, 0&#215;05, 0&#215;01, ++checksum, 0&#215;81};</p>

<p><acronym title="Reliable Data Tranport">RDT</acronym> has something similar to the ping on <acronym title="Internet Relay Chat">IRC</acronym>, It periodically sends us a 1 byte packet with 0&#215;50, expecting us to send a 1 byte packet with 0&#215;51</p>

<p>I hope you find this information useful.</p>]]></content:encoded>
			<wfw:commentRss>http://chema.solaresmaldonado.com/linux/13/the-rdt-protocol/ /feed</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>
