Archive

Archive for the ‘Programming’ Category

Win32 API: Passing Socket with IPC method

October 13, 2010 1 comment

Hi. In this post I talk to you how to correctly pass a socket created in a parent process to a child process in Microsoft 9x systems.
If you have ever written a multi-process concurrent server in a Unix environment, you may have noticed that the passage of the socket between parent and son processes takes place directly. That is, the child inherits the variables of his parent, also including the file descriptor associated with the socket.

Read more…

Hello World! – Brain mode

October 12, 2010 5 comments

Hi. How can we write an “hello world!” in brain-mode?
When we want to greet someone, the brain is activated and set as a greeting a phrase known to us: in our case, “hello world!”.
Read more…

Categories: Bullshit, C/C++ Tags: ,

Something about AMQP

October 11, 2010 Leave a comment

Hello,

If you haven’t heard nothing about Enterprise Messaging i suggest you  read the related wikipedia’s article http://en.wikipedia.org/wiki/Enterprise_messaging_system. In this article I will introduce the Advanced Messaging Queuing Protocol and some of his concepts.

Before all why talking about AMQP?  Because is the first open standard for the Enterprise Messaging; in a enterprise environment the integration is necessary and an open solution is needed especially because this kind of solution should be leveraged from any language and platform; JMS doesn’t do it very well because of his java dependence and his terms of license: JMS-like interface cannot legally be provided for non-Java platforms.

Continuing talking about AMQP, it supports this kind of message distributions:

  • Store-and-forward with many writers and one reader
  • Transaction distribution with many writers and many readers
  • Publish-subscribe with many writers and many readers
  • Content-based routing with many writers and many readers
  • Queued file transfer with many writers and many readers
  • Point-to-point connection between two peers

This standard is thought to have small and modular model therefore his task is splitted in two main roles, Exchange and  Message queue. This choice made available three main features:

  • The ability to create arbitrary exchange and message queue types
  • The ability to wire exchanges and message queues together to create any required message-processing system
  • The ability to control this completely through the protocol.

A Message queue is a storage entity, it can store messages in memory or in disk  and must provide messages to consumers applications, is described by some proprierties:

  • private or shared
  • durable or transient
  • permanent or temporary

The standard does not define directly entities like  Store and Forward queue or Pub-Sub queue, these entities are created trough Message queue’s attribute.

The Exchange entity takes messages from Applications Messages Producer and routes them to the Message Queue according to criteria called “bindings”. Bindings are therefore the relationship between Exchanges and the and Messages queues.

These are the basic concepts you need to know about AMQP model, in the next post i’ll  introduce you to qpid, an apache’s software project that fully respect this standard and we’ll try it with some source code examples.

inet_ntop() for Win32

October 9, 2010 3 comments

Like 4 years ago I made a little project for the operating system 2 class. I had to write an application capable of handling multiple file transfers for both Win32 and Linux. During the coding of the socket-side of the application I encountered an awkward problem: why the hell win32 does not have a compatibility function for the inet_ntop()?

Only recently, for Vista and 7, Microsoft introduced the InetNtop() function: http://tinyurl.com/3xrwaer

If you have to write something that needs to run on XP too (that still seems to be the most used operating system for home users: http://tinyurl.com/2w5ed8n ) just try this code :)


const char* inet_ntop(int af, const void* src, char* dst, int cnt){

	struct sockaddr_in srcaddr;

	memset(&srcaddr, 0, sizeof(struct sockaddr_in));
	memcpy(&(srcaddr.sin_addr), src, sizeof(srcaddr.sin_addr));

	srcaddr.sin_family = af;
	if (WSAAddressToString((struct sockaddr*) &srcaddr, sizeof(struct sockaddr_in), 0, dst, (LPDWORD) &cnt) != 0) {
		DWORD rv = WSAGetLastError();
		printf("WSAAddressToString() : %d\n",rv);
		return NULL;
	}
	return dst;
}

Timeout on Named Pipes

October 8, 2010 1 comment

Hi. In this post, I will show you how make a timeouted namedpipe with the WIN32 API: the msdn’s manual doesn’t explain how to do it.
The named pipes are an IPC’s method by which we can send data to an other process (like a son process).
Read more…

Using SHA1() function

October 6, 2010 9 comments

Hi. I’ ll show you how to convert any string into a SHA1 hash using the openssl library.
To use this library you must include in your codes this:

#include <openssl/sha.h>

Moreover you have to compile the source with the “-lssl” flag.
The following code takes in input a string (argv[1]) and generates an hash string through the SHA1() function. The value of “SHA_DIGEST_LENGTH” is 20 bytes, that is the dimension of SHA1 output.
This function stores the value computed in “temp” variable.
Then in the for loop, I copy the value of “temp” into “buf”, according to the standard format of SHA1 strings.

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argn, char *argv[]) {

	int i = 0;
	unsigned char temp[SHA_DIGEST_LENGTH];
	char buf[SHA_DIGEST_LENGTH*2];

	if ( argn != 2 ) {
		printf("Usage: %s string\n", argv[0]);
		return -1;
	}

	memset(buf, 0x0, SHA_DIGEST_LENGTH*2);
	memset(temp, 0x0, SHA_DIGEST_LENGTH);

	SHA1((unsigned char *)argv[1], strlen(argv[1]), temp);

	for (i=0; i < SHA_DIGEST_LENGTH; i++) {
		sprintf((char*)&(buf[i*2]), "%02x", temp[i]);
	}

	printf("SHA1 of %s is %s\n", argv[1], buf);

	return 0;

}

We can compile and run it as follows:

$ gcc sha.c -lssl -o sha
$ ./sha asd
SHA1 of asd is f10e2821bbbea527ea02200352313bc059445190

If you want know something else of SHA1() function you can use the manpages:

man 3 sha1

Or look up in openssl website: link

India’s Code

October 5, 2010 1 comment

Hello. I do not remember where I found the code that follows, so I don’t know who was the real
owner of this beauty (all rights to the original creator).
It is an obfuscated code in C language:

#include <stdio.h>

void main()
{
   
   int a, b = 10, c;
   int count = 1;
   
   for (b=c=10; a="- FIGURE?, UMKC,XYZHello Folks,\
		  TFy!QJu ROo TNn(ROo)SLq SLq ULo+\
		  UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\
		  NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\
		  HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\
		  T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\
		  Hq!WFs XDt!" [b+++21]; )
		  
     for(; a-- > 64 ; )
       putchar ( ++c=='Z' ? c = c/ 9:33^b&1);
}

Try to run it… amazing, is not it?

Read more…

Follow

Get every new post delivered to your Inbox.