static gboolean
gst_neonhttp_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
{
    GstNeonhttpSrc *src;
    gint res;
    ne_session *session = NULL;
    ne_request *request = NULL;

    src = GST_NEONHTTP_SRC (bsrc);

    if (!src->seekable)
        return FALSE;

    if (src->read_position == segment->start)
        return TRUE;

    res = gst_neonhttp_src_send_request_and_redirect (src,
            &session, &request, segment->start, src->automatic_redirect);

    /* if we are able to seek, replace the session */
    if (res == NE_OK && session) {
        gst_neonhttp_src_close_session (src);
        src->session = session;
        src->request = request;
        src->read_position = segment->start;
        return TRUE;
    }

    return FALSE;
}
/* close the socket and associated resources
 * used both to recover from errors and go to NULL state */
static gboolean
gst_neonhttp_src_stop (GstBaseSrc * bsrc)
{
  GstNeonhttpSrc *src;

  src = GST_NEONHTTP_SRC (bsrc);

  if (src->iradio_name) {
    g_free (src->iradio_name);
    src->iradio_name = NULL;
  }

  if (src->iradio_genre) {
    g_free (src->iradio_genre);
    src->iradio_genre = NULL;
  }

  if (src->iradio_url) {
    g_free (src->iradio_url);
    src->iradio_url = NULL;
  }

  if (src->icy_caps) {
    gst_caps_unref (src->icy_caps);
    src->icy_caps = NULL;
  }

  src->eos = FALSE;
  src->content_size = -1;
  src->read_position = 0;
  src->seekable = TRUE;

  gst_neonhttp_src_close_session (src);

#ifndef GST_DISABLE_GST_DEBUG
  ne_debug_init (NULL, 0);
#endif
  ne_oom_callback (NULL);
  ne_sock_exit ();

  return TRUE;
}
/* close the socket and associated resources
 * used both to recover from errors and go to NULL state */
static gboolean
gst_neonhttp_src_stop (GstBaseSrc * bsrc)
{
    GstNeonhttpSrc *src;

    src = GST_NEONHTTP_SRC (bsrc);

    src->eos = FALSE;
    src->content_size = -1;
    src->read_position = 0;
    src->seekable = TRUE;

    gst_neonhttp_src_close_session (src);

#ifndef GST_DISABLE_GST_DEBUG
    ne_debug_init (NULL, 0);
#endif
    ne_oom_callback (NULL);
    ne_sock_exit ();

    return TRUE;
}