Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > ffa962f43b504c2e215c06cb89a98d6e > files > 10

quvi-devel-0.2.16.1-1.fc14.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>callback_libsoup.c</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.7.4 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div id="top">
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
      <li id="searchli">
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<div class="title">callback_libsoup.c</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><span class="comment">/* quvi</span>
<span class="comment"> * Copyright (C) 2011  Toni Gundogdu &lt;legatvs@gmail.com&gt;</span>
<span class="comment"> *</span>
<span class="comment"> * This library is free software; you can redistribute it and/or</span>
<span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
<span class="comment"> * License as published by the Free Software Foundation; either</span>
<span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
<span class="comment"> *</span>
<span class="comment"> * This library is distributed in the hope that it will be useful,</span>
<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<span class="comment"> * Lesser General Public License for more details.</span>
<span class="comment"> *</span>
<span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
<span class="comment"> * License along with this library; if not, write to the Free Software</span>
<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA</span>
<span class="comment"> * 02110-1301  USA</span>
<span class="comment"> */</span>

<span class="comment">/* callback_libsoup.c -- Use libsoup (async) instead of libcurl (easy) */</span>

<span class="preprocessor">#include &quot;config.h&quot;</span>

<span class="preprocessor">#include &lt;stdio.h&gt;</span>
<span class="preprocessor">#include &lt;string.h&gt;</span>

<span class="preprocessor">#include &lt;<a class="code" href="quvi_8h.html">quvi/quvi.h</a>&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="net_8h.html">quvi/net.h</a>&gt;</span>

<span class="preprocessor">#ifdef HAVE_LIBSOUP_GNOME</span>
<span class="preprocessor"></span><span class="preprocessor">#include &lt;libsoup/soup-gnome.h&gt;</span>
<span class="preprocessor">#else</span>
<span class="preprocessor"></span><span class="preprocessor">#include &lt;libsoup/soup.h&gt;</span>
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span>
<span class="preprocessor">#include &quot;common.h&quot;</span>

<span class="keyword">static</span> <a class="code" href="group__libquvi__types.html#ga9a17038aa41a6f1585b541a56a9d4744">QUVIcode</a> status_callback(<span class="keywordtype">long</span> param, <span class="keywordtype">void</span> *data)
{
  <a class="code" href="group__libquvi__types.html#gac2712a9057f1dd9d79d0460d4b4c63b1" title="Word type.">quvi_word</a> status, type;

  status = <a name="a0"></a><a class="code" href="group__libquvi__macros.html#ga77f1d48f6ff37506211b7fce94a255d3" title="Return a low word from a long type variable.">quvi_loword</a>(param);
  type = <a name="a1"></a><a class="code" href="group__libquvi__macros.html#gaba151a3eff5cc7acf733484ec54576fa" title="Return a high word from a long type variable.">quvi_hiword</a>(param);

  <span class="keywordflow">switch</span> (status)
    {
    <span class="keywordflow">case</span> <a name="a2"></a><a class="code" href="group__libquvi__types.html#gga9a06c68a7230b058e483fc931cf86f15a9d613d7f108b87ca34e7cf9f93ea6fd2">QUVISTATUS_RESOLVE</a>:
      handle_resolve_status(type);
      <span class="keywordflow">break</span>;

    <span class="keywordflow">case</span> <a name="a3"></a><a class="code" href="group__libquvi__types.html#gga9a06c68a7230b058e483fc931cf86f15a9dfe1f8cc6b7704371d01b751be2e8ef">QUVISTATUS_FETCH</a>:
      handle_fetch_status(type, data);
      <span class="keywordflow">break</span>;

    <span class="keywordflow">case</span> <a name="a4"></a><a class="code" href="group__libquvi__types.html#gga9a06c68a7230b058e483fc931cf86f15adb08cf208475fd5017ebb148079584e9">QUVISTATUS_VERIFY</a>:
      handle_verify_status(type);
      <span class="keywordflow">break</span>;
    }

  fflush(stderr);

  <span class="keywordflow">return</span> (<a name="a5"></a><a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744ad5c802d9e04e5b25f52392b73bed4f24">QUVI_OK</a>);
}

<span class="keyword">static</span> <span class="keywordtype">void</span> set_feat(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n, SoupMessage *m,
                     <a class="code" href="group__libquvi__net__if.html#ga893f48b84dcf65c0c3ef802dcb51d81c">QUVInetPropertyFeatureName</a> feature,
                     <span class="keyword">const</span> <span class="keywordtype">char</span> *hdr)
{
  <span class="keywordtype">char</span> *s = <a name="a6"></a><a class="code" href="group__libquvi__net__if.html#ga62693008a5c9d1e9ad85d80cf5f6d22a" title="Convenience function that wraps quvi_net_getprop_feat()">quvi_net_get_one_prop_feat</a>(n, feature);
  <span class="keywordflow">if</span> (s)
    soup_message_headers_append(m-&gt;request_headers, hdr, s);
}

<span class="keyword">static</span> <span class="keywordtype">void</span> set_feats_from_lua_script(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n, SoupMessage *m)
{
  set_feat(n, m, <a name="a7"></a><a class="code" href="group__libquvi__net__if.html#gga893f48b84dcf65c0c3ef802dcb51d81ca5ac5cf4fd501dda5255aba245b3503c9">QUVI_NET_PROPERTY_FEATURE_ARBITRARYCOOKIE</a>, <span class="stringliteral">&quot;Cookie&quot;</span>);
  set_feat(n, m, <a name="a8"></a><a class="code" href="group__libquvi__net__if.html#gga893f48b84dcf65c0c3ef802dcb51d81ca43749657051b04228cf1e097ad3bf352">QUVI_NET_PROPERTY_FEATURE_USERAGENT</a>, <span class="stringliteral">&quot;User-Agent&quot;</span>);
}

<span class="preprocessor">#ifdef _0</span>
<span class="preprocessor"></span><span class="comment">/* Same as set_feats_from_lua_script above. quvi_net_get_one_prop_feat</span>
<span class="comment"> * is a convinience function that can be used instead unless the</span>
<span class="comment"> * application is expected handle &gt;1 of the same features (e.g. multiple</span>
<span class="comment"> * instances of QUVI_NET_PROPERTY_FEATURE_ARBITRARYCOOKIE in the</span>
<span class="comment"> * features list. */</span>
<span class="keyword">static</span> <span class="keywordtype">void</span> set_feats_from_lua_script_alt(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n, SoupMessage *m)
{
  <a class="code" href="group__libquvi__llst.html#gad3231946dd74d8fea18c7fe48ee77278" title="Linked list node handle.">quvi_llst_node_t</a> feature;
  <a name="a9"></a><a class="code" href="group__libquvi__net__if.html#gab74a136b6f5160719a620451804b02c0" title="Get network property.">quvi_net_getprop</a>(n, <a name="a10"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efcab97a03fd24907af5aacb125fd3d44bf5">QUVI_NET_PROPERTY_FEATURES</a>, &amp;feature);

  <span class="keywordflow">while</span> (feature)
    {
      <span class="keywordtype">char</span> *feature_name, *feature_value;
      <a class="code" href="group__libquvi__net__if.html#ga34e687d6eaafcdf10ea0cc51caec1dea" title="Network property feature handle.">quvi_net_propfeat_t</a> pfeat;

      pfeat = (<a name="a11"></a><a class="code" href="group__libquvi__net__if.html#ga34e687d6eaafcdf10ea0cc51caec1dea" title="Network property feature handle.">quvi_net_propfeat_t</a>) <a name="a12"></a><a class="code" href="group__libquvi__llst.html#gaa7ff7a95fcb7143973e4b7f691fc6c32" title="Return data of the linked list node.">quvi_llst_data</a>(feature);

      <a name="a13"></a><a class="code" href="group__libquvi__net__if.html#ga139b904b17335eab3cfbacdbaa5ba0a2" title="Get network property feature.">quvi_net_getprop_feat</a>(pfeat,
                            <a name="a14"></a><a class="code" href="group__libquvi__net__if.html#ggaf1ea51fb3d9169a1cd2a5976b400c920a897f02a7c62b2496333c80c48926e623">QUVI_NET_PROPERTY_FEATURE_NAME</a>, &amp;feature_name);

      <a class="code" href="group__libquvi__net__if.html#ga139b904b17335eab3cfbacdbaa5ba0a2" title="Get network property feature.">quvi_net_getprop_feat</a>(pfeat,
                            <a name="a15"></a><a class="code" href="group__libquvi__net__if.html#ggaf1ea51fb3d9169a1cd2a5976b400c920a571a9c2a0a0055ca0254a87d63ba6ea8">QUVI_NET_PROPERTY_FEATURE_VALUE</a>, &amp;feature_value);

      <span class="keywordflow">if</span> (strcmp(feature_name, <span class="stringliteral">&quot;arbitrary_cookie&quot;</span>) == 0)
        {
          soup_message_headers_append(
            m-&gt;request_headers, <span class="stringliteral">&quot;Cookie&quot;</span>, feature_value);
        }

      <span class="keywordflow">if</span> (strcmp(feature_name, <span class="stringliteral">&quot;user_agent&quot;</span>) == 0)
        {
          soup_message_headers_append(
            m-&gt;request_headers, <span class="stringliteral">&quot;User-Agent&quot;</span>, feature_value);
        }

      feature = <a name="a16"></a><a class="code" href="group__libquvi__llst.html#gacaf5b1a085c933d307d8f7765bb98f1a" title="Return next linked node.">quvi_llst_next</a>(feature);
    }
}
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span>
<span class="keyword">static</span> SoupSession *session = NULL;

<span class="keyword">static</span> <span class="keywordtype">void</span> send_message(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n, SoupMessage **message,
                         guint *status, SoupMessageFlags msg_flags,
                         <span class="keyword">const</span> <span class="keywordtype">int</span> head_flag, <span class="keyword">const</span> <span class="keywordtype">int</span> lua_feats)
{
  <span class="keywordtype">char</span> *url = NULL;

  <a class="code" href="group__libquvi__net__if.html#gab74a136b6f5160719a620451804b02c0" title="Get network property.">quvi_net_getprop</a>(n, <a name="a17"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efca195905fbe95b432a9a76edf29b408b63">QUVI_NET_PROPERTY_URL</a>, &amp;url);

  *message = soup_message_new(head_flag ? <span class="stringliteral">&quot;HEAD&quot;</span>:<span class="stringliteral">&quot;GET&quot;</span>, url);

  <span class="keywordflow">if</span> (msg_flags)
    soup_message_set_flags(*message, msg_flags);

  <span class="comment">/* In reality, the library sets these only for quvi.fetch. */</span>
  <span class="keywordflow">if</span> (lua_feats)
    set_feats_from_lua_script(n, *message);

  *status = soup_session_send_message(session, *message);

  <a name="a18"></a><a class="code" href="group__libquvi__net__if.html#ga8d3004ccaeca529a38be7ae92ac2578b" title="Set network property.">quvi_net_setprop</a>(n, <a name="a19"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efca90b00183af51ce8284e18463a66bd3eb">QUVI_NET_PROPERTY_RESPONSECODE</a>, *status);
}

<span class="keyword">static</span> <a class="code" href="group__libquvi__types.html#ga9a17038aa41a6f1585b541a56a9d4744">QUVIcode</a> fetch_callback(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n)
{
  SoupMessage *m;
  guint status;

  send_message(n, &amp;m, &amp;status,
               0, <span class="comment">/* Session flags */</span>
               0, <span class="comment">/* &#39;HEAD&#39; flag */</span>
               1); <span class="comment">/* Set features from quvi.fetch */</span>

  <span class="keywordflow">if</span> (SOUP_STATUS_IS_SUCCESSFUL(status))
    {
      <a class="code" href="group__libquvi__net__if.html#ga8d3004ccaeca529a38be7ae92ac2578b" title="Set network property.">quvi_net_setprop</a>(n, <a name="a20"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efcad6ec329695ceeb7107acdbf43f6c8459">QUVI_NET_PROPERTY_CONTENT</a>, m-&gt;response_body-&gt;data);
      <span class="keywordflow">return</span> (<a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744ad5c802d9e04e5b25f52392b73bed4f24">QUVI_OK</a>);
    }

  <a name="a21"></a><a class="code" href="group__libquvi__net__if.html#ga24ff549091b3fe3aa2ae2597872b61b6" title="Set network error message.">quvi_net_seterr</a>(n, <span class="stringliteral">&quot;%s (http/%d)&quot;</span>, m-&gt;reason_phrase, status);

  <span class="keywordflow">return</span> (<a name="a22"></a><a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744a4a312999c422f13f02f104ec4fd0ab79">QUVI_CALLBACK</a>);
}

<span class="keyword">static</span> <a class="code" href="group__libquvi__types.html#ga9a17038aa41a6f1585b541a56a9d4744">QUVIcode</a> resolve_callback(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n)
{
  SoupMessage *m;
  guint status;

  send_message(n, &amp;m, &amp;status,
               SOUP_MESSAGE_NO_REDIRECT, <span class="comment">/* Session flags */</span>
               0, <span class="comment">/* &#39;HEAD&#39; flag */</span>
               0); <span class="comment">/* Set features from quvi.fetch */</span>

  <span class="keywordflow">if</span> (SOUP_STATUS_IS_REDIRECTION(status))
    {
      <span class="keyword">const</span> <span class="keywordtype">char</span> *r_url =
        soup_message_headers_get_one(m-&gt;response_headers, <span class="stringliteral">&quot;Location&quot;</span>);

      <a class="code" href="group__libquvi__net__if.html#ga8d3004ccaeca529a38be7ae92ac2578b" title="Set network property.">quvi_net_setprop</a>(n, <a name="a23"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efcaedfff18c40416472205af8405170008b">QUVI_NET_PROPERTY_REDIRECTURL</a>, r_url);
    }
  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SOUP_STATUS_IS_SUCCESSFUL(status))
    {
      <a class="code" href="group__libquvi__net__if.html#ga24ff549091b3fe3aa2ae2597872b61b6" title="Set network error message.">quvi_net_seterr</a>(n, <span class="stringliteral">&quot;%s (http/%d)&quot;</span>, m-&gt;reason_phrase, status);
      <span class="keywordflow">return</span> (<a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744a4a312999c422f13f02f104ec4fd0ab79">QUVI_CALLBACK</a>);
    }

  <span class="keywordflow">return</span> (<a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744ad5c802d9e04e5b25f52392b73bed4f24">QUVI_OK</a>);
}

<span class="keyword">static</span> <a class="code" href="group__libquvi__types.html#ga9a17038aa41a6f1585b541a56a9d4744">QUVIcode</a> verify_callback(<a class="code" href="group__libquvi__net__if.html#ga8bf5b22ecd8ba98acd930eb4f072d842" title="Network handle.">quvi_net_t</a> n)
{
  SoupMessage *m;
  guint status;

  send_message(n, &amp;m, &amp;status,
               0, <span class="comment">/* Session flags */</span>
               1, <span class="comment">/* &#39;HEAD&#39; flag */</span>
               0); <span class="comment">/* Set features from quvi.fetch */</span>

  <span class="keywordflow">if</span> (SOUP_STATUS_IS_SUCCESSFUL(status))
    {
      goffset cl =
        soup_message_headers_get_content_length(m-&gt;response_headers);

      <span class="keyword">const</span> <span class="keywordtype">char</span> *ct =
        soup_message_headers_get_content_type(m-&gt;response_headers, NULL);

      <a class="code" href="group__libquvi__net__if.html#ga8d3004ccaeca529a38be7ae92ac2578b" title="Set network property.">quvi_net_setprop</a>(n, <a name="a24"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efca8dcc508fbc0af9ff2559bca6c4dc0d64">QUVI_NET_PROPERTY_CONTENTTYPE</a>, ct);
      <a class="code" href="group__libquvi__net__if.html#ga8d3004ccaeca529a38be7ae92ac2578b" title="Set network property.">quvi_net_setprop</a>(n, <a name="a25"></a><a class="code" href="group__libquvi__net__if.html#gga2e8c7bacf0cb4e99df868b922d2d1efcae07aad7bce484675d1c169eea73fe820">QUVI_NET_PROPERTY_CONTENTLENGTH</a>, cl);

      <span class="keywordflow">return</span> (<a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744ad5c802d9e04e5b25f52392b73bed4f24">QUVI_OK</a>);
    }

  <a class="code" href="group__libquvi__net__if.html#ga24ff549091b3fe3aa2ae2597872b61b6" title="Set network error message.">quvi_net_seterr</a>(n, <span class="stringliteral">&quot;%s (http/%d)&quot;</span>, m-&gt;reason_phrase, status);

  <span class="keywordflow">return</span> (<a class="code" href="group__libquvi__types.html#gga9a17038aa41a6f1585b541a56a9d4744a4a312999c422f13f02f104ec4fd0ab79">QUVI_CALLBACK</a>);
}

<span class="keyword">static</span> <span class="keywordtype">void</span> dump_media(<a class="code" href="group__libquvi__types.html#ga038af195c7db11b73115e4c76b474bc5" title="Media parsing session handle.">quvi_media_t</a> m)
{
  <span class="keywordtype">char</span> *m_url, *m_ct, *m_suffix;
  <span class="keywordtype">double</span> m_cl;

  <a name="a26"></a><a class="code" href="group__libquvi__getprop.html#gadb29c49e7d58fc408c991975a6aea612" title="Get media property information from a media session handle.">quvi_getprop</a>(m, <a name="a27"></a><a class="code" href="group__libquvi__types.html#gga7de3498b1882ad7026fc169a8bc345ccabc375a5d33913389250414f26f2632e8">QUVIPROP_MEDIAURL</a>, &amp;m_url);
  <a class="code" href="group__libquvi__getprop.html#gadb29c49e7d58fc408c991975a6aea612" title="Get media property information from a media session handle.">quvi_getprop</a>(m, <a name="a28"></a><a class="code" href="group__libquvi__types.html#gga7de3498b1882ad7026fc169a8bc345ccae8e3568b77436692aba8eb91a2fe4d3f">QUVIPROP_MEDIACONTENTTYPE</a>, &amp;m_ct);
  <a class="code" href="group__libquvi__getprop.html#gadb29c49e7d58fc408c991975a6aea612" title="Get media property information from a media session handle.">quvi_getprop</a>(m, <a name="a29"></a><a class="code" href="group__libquvi__types.html#gga7de3498b1882ad7026fc169a8bc345ccae8b9d59836f4b14eb7fd9f120070529b">QUVIPROP_MEDIACONTENTLENGTH</a>, &amp;m_cl);
  <a class="code" href="group__libquvi__getprop.html#gadb29c49e7d58fc408c991975a6aea612" title="Get media property information from a media session handle.">quvi_getprop</a>(m, <a name="a30"></a><a class="code" href="group__libquvi__types.html#gga7de3498b1882ad7026fc169a8bc345ccaf6744ad3bdc6607bfeefc52e6240edb8">QUVIPROP_FILESUFFIX</a>, &amp;m_suffix);

  spew_e(
    <span class="stringliteral">&quot;%s\n&quot;</span>
    <span class="stringliteral">&quot;url: %s\n&quot;</span>
    <span class="stringliteral">&quot;content-type: %s\n&quot;</span>
    <span class="stringliteral">&quot;content-length: %.0f\n&quot;</span>
    <span class="stringliteral">&quot;file suffix: %s\n&quot;</span>,
    __func__, m_url, m_ct, m_cl, m_suffix);
}

<span class="keyword">static</span> <span class="keywordtype">void</span> help()
{
  printf(
    <span class="stringliteral">&quot;Usage: callback_libsoup [--help|--log] [URL]\n\n&quot;</span>
    <span class="stringliteral">&quot;  -h,--help    .. Print help and exit\n&quot;</span>
    <span class="stringliteral">&quot;  -l,--logger  .. Enable logger\n\n&quot;</span>
    <span class="stringliteral">&quot;Note: Unless URL is specified, the default URL will be used\n&quot;</span>);
  exit(0);
}

<span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])
{
  <span class="keywordtype">char</span> *url = <span class="stringliteral">&quot;http://is.gd/yFNPMR&quot;</span>;
  <a class="code" href="group__libquvi__types.html#ga038af195c7db11b73115e4c76b474bc5" title="Media parsing session handle.">quvi_media_t</a> m;
  <span class="keywordtype">int</span> log_flag;
  <a class="code" href="group__libquvi__types.html#ga9a17038aa41a6f1585b541a56a9d4744">QUVIcode</a> rc;
  <a class="code" href="group__libquvi__types.html#gabe8d4dbff4b3bf3fc89377c34d0e089b" title="libquvi session handle">quvi_t</a> q;

  log_flag = 0;

  <span class="keywordflow">if</span> (argc &gt; 1)
    {
      <span class="keywordtype">int</span> i;
      <span class="keywordflow">for</span> (i=1; i&lt;argc; ++i)
        {
          <span class="keywordflow">if</span> (strcmp(argv[i], <span class="stringliteral">&quot;-l&quot;</span>) == 0
              || strcmp(argv[i], <span class="stringliteral">&quot;--logger&quot;</span>) == 0)
            {
              log_flag = 1;
            }
          <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(argv[i], <span class="stringliteral">&quot;-h&quot;</span>) == 0
                   || strcmp(argv[i], <span class="stringliteral">&quot;--help&quot;</span>) == 0)
            {
              help();
            }
          <span class="keywordflow">else</span>
            url = argv[i];
        }
    }

  rc = <a name="a31"></a><a class="code" href="group__libquvi__init.html#gab05fb31e4bd01cb0a0d544089388c77e" title="Start a new libquvi session.">quvi_init</a>(&amp;q);
  check_error(q,rc);

  <a name="a32"></a><a class="code" href="group__libquvi__setup.html#gaad1abc4a83c22f53e11b086dd418eac2" title="Set options for a libquvi session handle.">quvi_setopt</a>(q, <a name="a33"></a><a class="code" href="group__libquvi__types.html#gga4b18c016f0c446f4e5c6b21773ddc7e5a8cd1fce0d705df25d0eade4c6fe59944">QUVIOPT_STATUSFUNCTION</a>, &amp;status_callback);
  <a class="code" href="group__libquvi__setup.html#gaad1abc4a83c22f53e11b086dd418eac2" title="Set options for a libquvi session handle.">quvi_setopt</a>(q, <a name="a34"></a><a class="code" href="group__libquvi__types.html#gga4b18c016f0c446f4e5c6b21773ddc7e5a01819407acb047e6484e87c3d87e259d">QUVIOPT_FETCHFUNCTION</a>, &amp;fetch_callback);
  <a class="code" href="group__libquvi__setup.html#gaad1abc4a83c22f53e11b086dd418eac2" title="Set options for a libquvi session handle.">quvi_setopt</a>(q, <a name="a35"></a><a class="code" href="group__libquvi__types.html#gga4b18c016f0c446f4e5c6b21773ddc7e5a51f6fdb37299c048d6a0aa1d680437ab">QUVIOPT_RESOLVEFUNCTION</a>, &amp;resolve_callback);
  <a class="code" href="group__libquvi__setup.html#gaad1abc4a83c22f53e11b086dd418eac2" title="Set options for a libquvi session handle.">quvi_setopt</a>(q, <a name="a36"></a><a class="code" href="group__libquvi__types.html#gga4b18c016f0c446f4e5c6b21773ddc7e5a374023b9a5cdc8931cf16793bbb7986a">QUVIOPT_VERIFYFUNCTION</a>, &amp;verify_callback);

  g_type_init();

<span class="preprocessor">#ifdef HAVE_LIBSOUP_GNOME</span>
<span class="preprocessor"></span>  session = soup_session_async_new_with_options(
              SOUP_SESSION_ADD_FEATURE_BY_TYPE,
              SOUP_TYPE_PROXY_RESOLVER_GNOME,
              NULL
            );
<span class="preprocessor">#else</span>
<span class="preprocessor"></span>  session = soup_session_async_new();
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span>
  <span class="keywordflow">if</span> (log_flag)
    {
      SoupLogger *log = soup_logger_new(SOUP_LOGGER_LOG_HEADERS, -1);
      soup_session_add_feature(session, SOUP_SESSION_FEATURE(log));
      g_object_unref(log);
    }

  rc = <a name="a37"></a><a class="code" href="group__libquvi__parse.html#gaff86521371cf2fb49e690060b4e50908" title="Start a new media parsing session.">quvi_parse</a>(q, url, &amp;m);
  check_error(q, rc);

  dump_media(m);

  <a name="a38"></a><a class="code" href="group__libquvi__getprop.html#gad20d3c7f0d543ee050c3f7533efd211d" title="End a media parsing session.">quvi_parse_close</a>(&amp;m);
  <a name="a39"></a><a class="code" href="group__libquvi__release.html#ga25854269807bc004cf4718053803265e" title="End a libquvi session.">quvi_close</a>(&amp;q);

  <span class="keywordflow">return</span> (0);
}

<span class="comment">/* vim: set ts=2 sw=2 tw=72 expandtab: */</span>
</pre></div> </div>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address class="footer"><small>Generated on Thu Aug 18 2011 by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>