Пример #1
0
status_t
Session::Save()
{
	fClosing = true;

	char name[B_OS_NAME_LENGTH + 25];
	if (!IsMainSession()) {
		snprintf(name, sizeof(name), "/etc/launch_cache/%ld:%Ld %s",
			fNodeRef.device, fNodeRef.node, Name());
	} else
		snprintf(name, sizeof(name), "/etc/launch_cache/%s", Name());

	int fd = open(name, O_CREAT | O_TRUNC | O_WRONLY, 0644);
	if (fd < B_OK)
		return errno;

	status_t status = B_OK;
	off_t fileSize = 0;

	// ToDo: order nodes by timestamp... (should improve launch speed)
	// ToDo: test which parts of a file have been read (and save that as well)

	// enlarge file, so that it can be written faster
	ftruncate(fd, 512 * 1024);

	struct hash_iterator iterator;
	struct node *node;

	hash_open(fNodeHash, &iterator);
	while ((node = (struct node *)hash_next(fNodeHash, &iterator)) != NULL) {
		snprintf(name, sizeof(name), "%ld:%Ld\n", node->ref.device, node->ref.node);

		ssize_t bytesWritten = write(fd, name, strlen(name));
		if (bytesWritten < B_OK) {
			status = bytesWritten;
			break;
		}

		fileSize += bytesWritten;
	}

	hash_close(fNodeHash, &iterator, false);

	ftruncate(fd, fileSize);
	close(fd);

	return status;
}
Пример #2
0
ifnet *if_path_to_ifnet(const char *path)
{
    ifnet *i;
    struct hash_iterator iter;

    mutex_lock(&ifhash_lock);
    hash_open(ifhash, &iter);
    while((i = hash_next(ifhash, &iter)) != NULL) {
        if(!strcmp(path, i->path))
            break;
    }
    hash_close(ifhash, &iter, false);
    mutex_unlock(&ifhash_lock);

    return i;
}
Пример #3
0
static int pipefs_unmount(fs_cookie _fs)
{
	struct pipefs *fs = _fs;
	struct pipefs_vnode *v;
	struct hash_iterator i;

	TRACE(("pipefs_unmount: entry fs = 0x%x\n", fs));

	// delete all of the vnodes
	hash_open(fs->vnode_list_hash, &i);
	while((v = (struct pipefs_vnode *)hash_next(fs->vnode_list_hash, &i)) != NULL) {
		pipefs_delete_vnode(fs, v, true);
	}
	hash_close(fs->vnode_list_hash, &i, false);

	hash_uninit(fs->vnode_list_hash);
	mutex_destroy(&fs->hash_lock);
	kfree(fs);

	return 0;
}
Пример #4
0
static status_t
arp_control(const char *subsystem, uint32 function, void *buffer,
	size_t bufferSize)
{
	struct arp_control control;
	if (bufferSize != sizeof(struct arp_control))
		return B_BAD_VALUE;
	if (user_memcpy(&control, buffer, sizeof(struct arp_control)) < B_OK)
		return B_BAD_ADDRESS;

	MutexLocker locker(sCacheLock);

	switch (function) {
		case ARP_SET_ENTRY:
		{
			sockaddr_dl hardwareAddress;

			hardwareAddress.sdl_len = sizeof(sockaddr_dl);
			hardwareAddress.sdl_family = AF_LINK;
			hardwareAddress.sdl_index = 0;
			hardwareAddress.sdl_type = IFT_ETHER;
			hardwareAddress.sdl_e_type = ETHER_TYPE_IP;
			hardwareAddress.sdl_nlen = hardwareAddress.sdl_slen = 0;
			hardwareAddress.sdl_alen = ETHER_ADDRESS_LENGTH;
			memcpy(hardwareAddress.sdl_data, control.ethernet_address,
				ETHER_ADDRESS_LENGTH);

			return arp_update_entry(control.address, &hardwareAddress,
				control.flags & (ARP_FLAG_PUBLISH | ARP_FLAG_PERMANENT
					| ARP_FLAG_REJECT));
		}

		case ARP_GET_ENTRY:
		{
			arp_entry *entry = arp_entry::Lookup(control.address);
			if (entry == NULL || !(entry->flags & ARP_FLAG_VALID))
				return B_ENTRY_NOT_FOUND;

			if (entry->hardware_address.sdl_alen == ETHER_ADDRESS_LENGTH) {
				memcpy(control.ethernet_address,
					entry->hardware_address.sdl_data, ETHER_ADDRESS_LENGTH);
			} else
				memset(control.ethernet_address, 0, ETHER_ADDRESS_LENGTH);

			control.flags = entry->flags & ARP_PUBLIC_FLAG_MASK;
			return user_memcpy(buffer, &control, sizeof(struct arp_control));
		}

		case ARP_GET_ENTRIES:
		{
			hash_iterator iterator;
			hash_open(sCache, &iterator);

			arp_entry *entry;
			uint32 i = 0;
			while ((entry = (arp_entry *)hash_next(sCache, &iterator)) != NULL
				&& i < control.cookie) {
				i++;
			}
			hash_close(sCache, &iterator, false);

			if (entry == NULL)
				return B_ENTRY_NOT_FOUND;

			control.cookie++;
			control.address = entry->protocol_address;
			if (entry->hardware_address.sdl_alen == ETHER_ADDRESS_LENGTH) {
				memcpy(control.ethernet_address,
					entry->hardware_address.sdl_data, ETHER_ADDRESS_LENGTH);
			} else
				memset(control.ethernet_address, 0, ETHER_ADDRESS_LENGTH);
			control.flags = entry->flags & ARP_PUBLIC_FLAG_MASK;

			return user_memcpy(buffer, &control, sizeof(struct arp_control));
		}

		case ARP_DELETE_ENTRY:
		{
			arp_entry *entry = arp_entry::Lookup(control.address);
			if (entry == NULL)
				return B_ENTRY_NOT_FOUND;
			if ((entry->flags & ARP_FLAG_LOCAL) != 0)
				return B_BAD_VALUE;

			entry->ScheduleRemoval();
			return B_OK;
		}

		case ARP_FLUSH_ENTRIES:
		{
			hash_iterator iterator;
			hash_open(sCache, &iterator);

			arp_entry *entry;
			while ((entry = (arp_entry *)hash_next(sCache, &iterator)) != NULL) {
				// we never flush local ARP entries
				if ((entry->flags & ARP_FLAG_LOCAL) != 0)
					continue;

				entry->ScheduleRemoval();
			}
			hash_close(sCache, &iterator, false);
			return B_OK;
		}

		case ARP_IGNORE_REPLIES:
			sIgnoreReplies = control.flags != 0;
			return B_OK;
	}

	return B_BAD_VALUE;
}
Пример #5
0
int
rsstool_write_xml (st_rsstool_t *rt)
{
#define XMLPRINTF(s) xmlTextWriterWriteString(writer,BAD_CAST s)
  st_rss_t rss;
  int i = 0;
  xmlTextWriterPtr writer;
  xmlBufferPtr buffer;
  st_hash_t *dl_url_h = NULL;
  st_hash_t *url_h = NULL;
  st_hash_t *title_h = NULL;
  int items = rsstool_get_item_count (rt);
#define ENCODE(s) s
//#define ENCODE(s) base64_enc(s,0)
//#define ENCODE(s) str_escape_xml(s)

  memset (&rss, 0, sizeof (st_rss_t));

  if (!(buffer = xmlBufferCreate ()))
    return -1;

  if (!(writer = xmlNewTextWriterMemory (buffer, 0)))
    return -1;

  xmlTextWriterStartDocument (writer, NULL, "UTF-8", NULL);

  xmlTextWriterWriteComment (writer, BAD_CAST " RSStool - read, parse, merge and write RSS and Atom feeds\n"                            
    "http://rsstool.berlios.de ");

  XMLPRINTF("\n");

  xmlTextWriterWriteComment (writer, BAD_CAST "\n"
         "format:\n"
         "item[]\n"
         "  dl_url           \n"
         "  dl_url_md5\n"
         "  dl_url_crc32\n"
         "  dl_date\n"
         "  user             author\n"
         "  site\n"
         "  url              \n"
         "  url_md5\n"
         "  url_crc32\n"
         "  date             default: current time\n"
         "  title            used by searches for related items\n"
         "  title_md5\n"
         "  title_crc32\n"
         "  desc             description\n"
         "  media_keywords   default: keywords from title and description\n"
         "  media_duration   event length\n"
         "  media_image      thumbnail\n"
         "  event_start      default: date\n"
         "  event_end        default: event_start + media_duration\n"
);

  XMLPRINTF("\n");

  xmlTextWriterStartElement (writer, BAD_CAST "rsstool");  // <rsstool>
  xmlTextWriterWriteAttribute (writer, BAD_CAST "version", BAD_CAST RSSTOOL_VERSION_S);

  for (i = 0; i < items && i < RSSMAXITEM; i++)
//  for (i = 0; i < items; i++)
    {
      dl_url_h = hash_open (HASH_MD5|HASH_CRC32);
      url_h = hash_open (HASH_MD5|HASH_CRC32);
      title_h = hash_open (HASH_MD5|HASH_CRC32);

      dl_url_h = hash_update (dl_url_h, (const unsigned char *) rt->item[i]->feed_url, strlen (rt->item[i]->feed_url));
      url_h = hash_update (url_h, (const unsigned char *) rt->item[i]->url, strlen (rt->item[i]->url));
      title_h = hash_update (title_h, (const unsigned char *) rt->item[i]->title, strlen (rt->item[i]->title));

      XMLPRINTF("\n  ");

      xmlTextWriterStartElement (writer, BAD_CAST "item"); // <item>

      XMLPRINTF("\n    ");

//      xmlTextWriterWriteElement (writer, BAD_CAST "dl_url", BAD_CAST rt->item[i]->feed_url);
      xmlTextWriterWriteFormatElement (writer, BAD_CAST "dl_url", "%s", rt->item[i]->feed_url);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "dl_url_md5", "%s", hash_get_s (dl_url_h, HASH_MD5));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "dl_url_crc32", "%u", hash_get_crc32 (dl_url_h));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "dl_date", "%ld", rsstool.start_time);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "user", "%s", ENCODE (rt->item[i]->user));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "site", "%s", ENCODE (rt->item[i]->site));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "url", "%s", rt->item[i]->url);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "url_md5", "%s", hash_get_s (url_h, HASH_MD5));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "url_crc32", "%u", hash_get_crc32 (url_h));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "date", "%ld", rt->item[i]->date);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "title", "%s", ENCODE (rt->item[i]->title));


      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "title_md5", "%s", hash_get_s (title_h, HASH_MD5));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "title_crc32", "%u", hash_get_crc32 (title_h));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "desc", "%s", ENCODE (rt->item[i]->desc));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "media_keywords", "%s", ENCODE (rt->item[i]->media_keywords));

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "media_duration", "%ld", rt->item[i]->media_duration);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "media_image", "%s", rt->item[i]->media_image);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "event_start", "%ld", rt->item[i]->event_start);

      XMLPRINTF("\n    ");

      xmlTextWriterWriteFormatElement (writer, BAD_CAST "event_end", "%ld", rt->item[i]->event_end);

      XMLPRINTF("\n  ");

      xmlTextWriterEndElement (writer); // </item>

      hash_close (dl_url_h);
      hash_close (url_h);
      hash_close (title_h);
    }

  XMLPRINTF("\n");

  xmlTextWriterEndDocument (writer);  // </rsstool>

  xmlFreeTextWriter (writer);

  fputs ((const char *) buffer->content, rt->output_file);

  xmlBufferFree (buffer);

  if (items >= RSSMAXITEM)
    {
      char buf[MAXBUFSIZE];

      sprintf (buf, "can write only RSS feeds with up to %d items (was %d items)\n",
        RSSMAXITEM, items);
      rsstool_log (rt, buf);
    }

  return 0;
}
Пример #6
0
int
rsstool_write_xml (st_rsstool_t *rt)
{
  st_rss_t rss;
  int i = 0;
  st_hash_t *dl_url_h = NULL;
  st_hash_t *url_h = NULL;
  st_hash_t *title_h = NULL;
  int items = rsstool_get_item_count (rt);
//#define ENCODE(s) s
#define ENCODE(s) base64_enc(s,0)
//#define ENCODE(s) str_escape_xml(s)

  memset (&rss, 0, sizeof (st_rss_t));

  fputs ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", rsstool.output_file);

  fputs ("<!--\n"
         "RSStool - read, parse, merge and write RSS and Atom feeds\n"
         "http://rsstool.berlios.de\n"
         "-->\n", rsstool.output_file);

  fputs ("<!--\n"
         "format:\n"
         "item[]\n"
         "  dl_url           \n"
         "  dl_url_md5\n"
         "  dl_url_crc32\n"
         "  dl_date\n"
         "  user             (base64 encoded)\n"
         "  site             (base64 encoded)\n"
         "  url              \n"
         "  url_md5\n"
         "  url_crc32\n"
         "  date\n"
         "  title            used by searches for related items (base64 encoded)\n"
         "  title_md5\n"
         "  title_crc32\n"
         "  desc             description (base64 encoded)\n"
         "  media_keywords   default: keywords from title and description\n"
         "  media_duration\n"
         "  media_thumbnail  path (base64 encoded)\n"
//         "  media_image      path (base64 encoded)\n"
//         "  event_start      default: date\n"
//         "  event_end        default: event_start + media_duration\n"
         "-->\n", rsstool.output_file);

  fputs ("<rsstool version=\"" RSSTOOL_VERSION_S "\">\n", rsstool.output_file);

  for (i = 0; i < items && i < RSSMAXITEM; i++)
//  for (i = 0; i < items; i++)
    {
      dl_url_h = hash_open (HASH_MD5|HASH_CRC32);
      url_h = hash_open (HASH_MD5|HASH_CRC32);
      title_h = hash_open (HASH_MD5|HASH_CRC32);

      dl_url_h = hash_update (dl_url_h, (const unsigned char *) rt->item[i]->feed_url, strlen (rt->item[i]->feed_url));
      url_h = hash_update (url_h, (const unsigned char *) rt->item[i]->url, strlen (rt->item[i]->url));
      title_h = hash_update (title_h, (const unsigned char *) rt->item[i]->title, strlen (rt->item[i]->title));

      fprintf (rsstool.output_file,
               "  <item>\n"
               "    <dl_url>%s</dl_url>\n"
               "    <dl_url_md5>%s</dl_url_md5>\n"
               "    <dl_url_crc32>%u</dl_url_crc32>\n"
               "    <dl_date>%ld</dl_date>\n"
               "    <user>%s</user>\n"
               "    <site>%s</site>\n"
               "    <url>%s</url>\n"
               "    <url_md5>%s</url_md5>\n"
               "    <url_crc32>%u</url_crc32>\n"
               "    <date>%ld</date>\n"
               "    <title>%s</title>\n"
               "    <title_md5>%s</title_md5>\n"
               "    <title_crc32>%u</title_crc32>\n"
               "    <desc>%s</desc>\n"
               "    <media_keywords>%s</media_keywords>\n"
               "    <media_duration>%d</media_duration>\n"
               "    <media_thumbnail>%s</media_thumbnail>\n"
//               "    <media_image>%s</media_image>\n"
//               "    <event_start>%u</event_start>\n"
//               "    <event_end>%u</event_end>\n"
               "  </item>\n",
        str_escape_xml (rt->item[i]->feed_url),
        hash_get_s (dl_url_h, HASH_MD5),
        hash_get_crc32 (dl_url_h),
        time (0),
        ENCODE (rt->item[i]->user),
        ENCODE (rt->item[i]->site),
        str_escape_xml (rt->item[i]->url),
        hash_get_s (url_h, HASH_MD5),
        hash_get_crc32 (url_h),
        rt->item[i]->date,
        ENCODE (rt->item[i]->title),
        hash_get_s (title_h, HASH_MD5),
        hash_get_crc32 (title_h),
        ENCODE (rt->item[i]->desc),
        ENCODE (rt->item[i]->media_keywords),
        rt->item[i]->media_duration,
        str_escape_xml (rt->item[i]->media_thumbnail)
//        str_escape_xml (rt->item[i]->media_image),
//        rt->item[i]->event_start,
//        rt->item[i]->event_end
);

      hash_close (dl_url_h);
      hash_close (url_h);
      hash_close (title_h);
    }

  fputs ("</rsstool>\n", rsstool.output_file);

  if (items >= RSSMAXITEM)
    {
      char buf[MAXBUFSIZE];

      sprintf (buf, "can write only RSS feeds with up to %d items (was %d items)\n",
        RSSMAXITEM, items);
      rsstool_log (rt, buf);
    }

  return 0;
}
Пример #7
0
/*
 * Manage a new provider -> read information and add symbols.
 */
static guint
gdisp_insertProvider ( Kernel_T *kernel,
                       gchar    *url )
{

    TSP_provider_t            *provider      = NULL;
    Provider_T                *newProvider   = (Provider_T*)NULL;
    Symbol_T                  *symbolList    = (Symbol_T*)NULL;
    GString                   *messageString = (GString*)NULL;
    gint                       symbolCpt     = 0;
    gint                       requestStatus = 0;
    TSP_sample_symbol_info_t  *symbolInfo    = (TSP_sample_symbol_info_t*)NULL;
    const TSP_answer_sample_t *providerInfo  = (const TSP_answer_sample_t*)NULL;

    /*
     * Check the original url is not known yet.
     */
    if (gdisp_getProviderByOriginalUrl(kernel,url) != (Provider_T*)NULL) {
        return -1;
    }

    /*
     * Try to connect to the URL.
     */
    provider = TSP_consumer_connect_url(url);

    if (provider != (TSP_provider_t*)NULL) {

        /*
         * Store all available information for this provider.
         */

        /*
         * Allocate memory for this new provider.
         * Set up its status to 'FROM_SCRATCH'.
         */
        newProvider = (Provider_T*)g_malloc0(sizeof(Provider_T));
        assert(newProvider);

        newProvider->pStatus = GD_FROM_SCRATCH;


        /*
         * Now store the handle, get back the name.
         * Set up its status to 'SESSION_CLOSED'.
         * Insert it into the kernel provider list.
         */
        newProvider->pOriginalUrl = g_string_new(url);
        newProvider->pHandle      = provider;
        newProvider->pIdentity    = kernel->providerId++ % GD_MAX_PROVIDER_NUMBER;
        newProvider->pUrl         =
            g_string_new(TSP_consumer_get_connected_name(newProvider->pHandle));
        assert(newProvider->pUrl);

        newProvider->pStatus = GD_SESSION_CLOSED;

        kernel->providerList = g_list_insert_sorted(kernel->providerList,
                               (gpointer)newProvider,
                               gdisp_sortProviderByUrl);
        assert(kernel->providerList);


        /*
         * Ask the provider for a new consumer session.
         * Set up its status to 'SESSION_OPENED'.
         */
        requestStatus = TSP_consumer_request_open(newProvider->pHandle,
                        (gint)NULL,
                        (gchar**)NULL);

        if (TSP_STATUS_OK == requestStatus) {

            /*
             * Now the session is opened, get back all available information.
             * Keep the current status, since symbols are not requested here.
             */
            if (kernel->retreiveAllSymbols == TRUE) {
                requestStatus =
                    TSP_consumer_request_information(newProvider->pHandle);
            }
            else {
                requestStatus =
                    TSP_consumer_request_filtered_information(newProvider->pHandle,
                            TSP_FILTER_MINIMAL,
                            MINIMAL_STRING);
            }

            if (TSP_STATUS_OK == requestStatus) {

                /* Do not free 'providerInfo' structure */
                providerInfo = TSP_consumer_get_information(newProvider->pHandle);
                assert(providerInfo);

                newProvider->pVersionId           = providerInfo->version_id;
                newProvider->pChannelId           = providerInfo->channel_id;
                newProvider->pTimeOut             = providerInfo->provider_timeout;
                newProvider->pGroupNumber         = providerInfo->provider_group_number;
                newProvider->pBaseFrequency       = providerInfo->base_frequency;
                newProvider->pMaxPeriod           = providerInfo->max_period;
                newProvider->pMaxClientNumber     = providerInfo->max_client_number;
                newProvider->pCurrentClientNumber = providerInfo->current_client_number;
                newProvider->pSymbolNumber        = providerInfo->symbols.TSP_sample_symbol_info_list_t_len;

                /*
                 * Shall I retreive all symbols ?? It depends on the action.
                 */
                if (kernel->retreiveAllSymbols == TRUE) {

                    if (newProvider->pSymbolNumber > 0) {

                        /*
                         * Allocate symbol table.
                         */
                        newProvider->pSymbolList = (Symbol_T*)
                                                   g_malloc0(newProvider->pSymbolNumber * sizeof(Symbol_T));
                        assert(newProvider->pSymbolList);

                        /*
                         * Allocate symbol hash table for extra-boosted search.
                         */
                        newProvider->pSymbolHashTable = hash_open('.','z');
                        assert(newProvider->pSymbolHashTable);

                    }

                    /*
                     * Loop over all symbols.
                     */
                    symbolInfo = providerInfo->symbols.TSP_sample_symbol_info_list_t_val;
                    symbolList = newProvider->pSymbolList;

                    for (symbolCpt=0;
                            symbolCpt<newProvider->pSymbolNumber;
                            symbolCpt++, symbolList++, symbolInfo++) {

                        /* copy the whole structure... */
                        symbolList->sInfo = *symbolInfo;
                        symbolList->sPgi  =  symbolInfo->provider_global_index;

                        /* ... and do not forget to duplicate pointers */
                        symbolList->sInfo.name = gdisp_strDup(symbolInfo->name);

                        /* Default is : at maximum frequency without offset */
                        symbolList->sInfo.period = 1;
                        symbolList->sInfo.phase  = 0;

                        /* do not treat table */
                        if (symbolList->sInfo.dimension > 1) {
                            symbolList->sInfo.provider_global_index = -1;
                            symbolList->sPgi = -1;
                        }

                        /* initialize extrema */
                        symbolList->sMinimum = - G_MAXDOUBLE;
                        symbolList->sMaximum = + G_MAXDOUBLE;

                        /* insert symbol into hash table */
                        hash_append(newProvider->pSymbolHashTable,
                                    symbolList->sInfo.name,
                                    (void*)symbolList);

                    } /* symbolCpt */

                    /*
                     * Build PGI to symbol hash table.
                     */
                    gdisp_buildProviderPgiHashTable(newProvider,
                                                    &providerInfo->symbols);

                    /*
                     * Get symbol extended information.
                     */
                    gdisp_getSymbolExtendedInformation(newProvider,
                                                       TRUE /* forget any previous info */);

                } /* retreiveAllSymbols == TRUE */

                /*
                 * Session is now opened towards provider.
                 */
                newProvider->pStatus = GD_SESSION_OPENED;

                messageString = g_string_new((gchar*)NULL);
                g_string_sprintf(messageString,
                                 "Session opened on <%s>",
                                 newProvider->pUrl->str);
                (*kernel->outputFunc)(kernel,messageString,GD_MESSAGE);


            } /* requestStatus == TRUE (TSP_consumer_request_information) */

            else {

                messageString = g_string_new((gchar*)NULL);
                g_string_sprintf(messageString,"Cannot get back information from");
                (*kernel->outputFunc)(kernel,messageString,GD_ERROR);

                messageString = g_string_new((gchar*)NULL);
                g_string_sprintf(messageString,
                                 "<%s> provider. Session is closed.",
                                 newProvider->pUrl->str);
                (*kernel->outputFunc)(kernel,messageString,GD_ERROR);

            }

        } /* requestStatus == TRUE (TSP_consumer_request_open) */

        else {

            messageString = g_string_new((gchar*)NULL);
            g_string_sprintf(messageString,"Cannot open a session towards");
            (*kernel->outputFunc)(kernel,messageString,GD_ERROR);

            messageString = g_string_new((gchar*)NULL);
            g_string_sprintf(messageString,
                             "<%s> provider. Aborting.",
                             newProvider->pUrl->str);
            (*kernel->outputFunc)(kernel,messageString,GD_ERROR);

        }

    } /* End if available provider */

    else {

        messageString = g_string_new((gchar*)NULL);
        g_string_sprintf(messageString,
                         "No TSP provider found on host %s.",
                         url);
        (*kernel->outputFunc)(kernel,messageString,GD_ERROR);

    }

    return (provider == NULL ? -1 : 0);

}