DCHK Client Version 0.5.7 - Documentation DomainCheck

Example 1: Low level communication
[API Usage]

The following example shows how to implement a low level communication with a DCHK server by using only the irislwz_*-functions. This approach is most flexible and gives you the ability to test invalid combinations of flags or invalid XML. But it's also the most work.

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


int main(int argc, char **argv)
{
    int ret;
    // Define IRISLWZ_HANDLE
    IRISLWZ_HANDLE iris;
    // Assume first Parameter is the domain which should be checked
    const char *domain=argv[1];
    // Initialize IRISLWZ_HANDLE
    irislwz_Init(&iris);
    // Set hostname and port
    irislwz_SetHost(&iris,"dchk.denic.de",715);
    // Set authority
    irislwz_SetAuthority(&iris,(const char*)"My Authority");
    // Use compression
    irislwz_SendDeflated(&iris,1);
    irislwz_AcceptDeflated(&iris,1);
    // Set Timeout to 5 seconds
    irislwz_SetTimeout(&iris,5,0);
    // Check if connection is possible
    if (!irislwz_Connect(&iris)) {
        ret=irislwz_GetErrorCode(&iris);
        irislwz_PrintError(&iris);
        irislwz_Exit(&iris);
        return ret;
    }
    char *entityClass="domain-name";
    // allocate memory for query
    char *query=(char*)malloc(1024);
    // build query
    sprintf(query,"<iris1:request xmlns:iris1=\"urn:ietf:params:xml:ns:iris1\">"
            "<iris1:searchSet>"
            "<iris1:lookupEntity registryType=\"dchk1\" entityClass=\"%s\" "
            "entityName=\"%s\"/>"
            "</iris1:searchSet>"
            "</iris1:request>",entityClass,domain);
    // Send request
    if (!irislwz_Query(&iris,query)) {
        free(query);
        ret=irislwz_GetErrorCode(&iris);
        irislwz_PrintError(&iris);
        irislwz_Exit(&iris);
        return ret;
    }
    free(query);
    // Print answer
    printf("%s\n",iris.response.beautified);

    irislwz_Exit(&iris);
    return 0;
}

// end

To compile the example with gcc, type:

gcc -I/usr/local/include -L/usr/local/lib example1.c -o example1 -ldchk -lxml2

You probably have to add or change the path statements on your environment.

When calling the compiled example with a domain name, you will get the following answer:

./example1 denic.de

<?xml version="1.0" encoding="UTF-8"?>
<iris1:response xmlns:iris1="urn:ietf:params:xml:ns:iris1">
  <iris1:resultSet>
    <iris1:answer>
      <urn:domain xmlns:urn="urn:ietf:params:xml:ns:dchk1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" registryType="dchk1" entityClass="domain-name" entityName="denic.de" authority="de" xsi:type="urn:domainType">
        <urn:domainName>denic.de</urn:domainName>
        <urn:status>
          <urn:active/>
        </urn:status>
        <urn:lastDatabaseUpdateDateTime>2008-06-10T09:45:00+02:00</urn:lastDatabaseUpdateDateTime>
      </urn:domain>
    </iris1:answer>
  </iris1:resultSet>
</iris1:response>
Generated on Wed Aug 4 21:23:46 2010 for DCHK Client Documentation by  doxygen 1.6.3