⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkcupsutils.c

📁 This GTK+ version 2.12.3. GTK+ is a multi-platform toolkit for creating graphical user interfaces.
💻 C
📖 第 1 页 / 共 3 页
字号:
            g_print ("CUPS Backend: %s - status %i\n", G_STRFUNC, http_status));  request->poll_state = GTK_CUPS_HTTP_READ;  if (http_status == HTTP_CONTINUE)    {      goto again;     }  else if (http_status == HTTP_UNAUTHORIZED)    {      /* TODO: callout for auth */      g_warning ("NOT IMPLEMENTED: We need to prompt for authorization");      request->state = GTK_CUPS_POST_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;            /* TODO: create a not implemented error code */      gtk_cups_result_set_error (request->result,                                  GTK_CUPS_ERROR_GENERAL,                                 0,                                 0,                                 "Can't prompt for authorization");      return;    }  else if (http_status == HTTP_ERROR)    {      int error = httpError (request->http);#ifdef G_OS_WIN32      if (error != WSAENETDOWN && error != WSAENETUNREACH)#else      if (error != ENETDOWN && error != ENETUNREACH)	  #endif /* G_OS_WIN32 */        {          request->attempts++;          goto again;        }      else        {          request->state = GTK_CUPS_POST_DONE;          request->poll_state = GTK_CUPS_HTTP_IDLE;               gtk_cups_result_set_error (request->result,                                     GTK_CUPS_ERROR_HTTP,                                     http_status,                                     error,                                      "Unknown HTTP error");          return;        }    }  else if (http_status == HTTP_UPGRADE_REQUIRED)    {      /* Flush any error message... */      httpFlush (request->http);      cupsSetEncryption (HTTP_ENCRYPT_REQUIRED);      request->state = GTK_CUPS_POST_CONNECT;      /* Reconnect... */      httpReconnect (request->http);      /* Upgrade with encryption... */      httpEncryption (request->http, HTTP_ENCRYPT_REQUIRED);       request->attempts++;      goto again;    }  else if (http_status != HTTP_OK)    {      int http_errno;      http_errno = httpError (request->http);      if (http_errno == EPIPE)        request->state = GTK_CUPS_POST_CONNECT;      else        {          request->state = GTK_CUPS_POST_DONE;          gtk_cups_result_set_error (request->result,                                     GTK_CUPS_ERROR_HTTP,                                     http_status,                                     http_errno,                                      "HTTP Error in POST %s",                                      g_strerror (http_errno));         request->poll_state = GTK_CUPS_HTTP_IDLE;           httpFlush (request->http);           return;        }      request->poll_state = GTK_CUPS_HTTP_IDLE;             httpFlush (request->http);             request->last_status = HTTP_CONTINUE;      httpClose (request->http);      request->http = NULL;      return;      }  else    {      request->state = GTK_CUPS_POST_READ_RESPONSE;      return;    } again:  http_status = HTTP_CONTINUE;  if (httpCheck (request->http))    http_status = httpUpdate (request->http);  request->last_status = http_status;}static void _post_read_response (GtkCupsRequest *request){  ipp_state_t ipp_status;  GTK_NOTE (PRINTING,            g_print ("CUPS Backend: %s\n", G_STRFUNC));  request->poll_state = GTK_CUPS_HTTP_READ;  if (request->result->ipp_response == NULL)    request->result->ipp_response = ippNew();  ipp_status = ippRead (request->http,                         request->result->ipp_response);  if (ipp_status == IPP_ERROR)    {      int ipp_error = cupsLastError ();      gtk_cups_result_set_error (request->result,                                   GTK_CUPS_ERROR_IPP,                                 ipp_status,                                 ipp_error,                                 "%s",                                 ippErrorString (ipp_error));            ippDelete (request->result->ipp_response);      request->result->ipp_response = NULL;      request->state = GTK_CUPS_POST_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;    }  else if (ipp_status == IPP_DATA)    {      request->state = GTK_CUPS_POST_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;    }}static void _get_send (GtkCupsRequest *request){  GTK_NOTE (PRINTING,            g_print ("CUPS Backend: %s\n", G_STRFUNC));  request->poll_state = GTK_CUPS_HTTP_WRITE;  if (request->data_io == NULL)    {      gtk_cups_result_set_error (request->result,                                 GTK_CUPS_ERROR_IO,                                 G_IO_STATUS_ERROR,                                 G_IO_CHANNEL_ERROR_FAILED,                                  "Get requires an open io channel");      request->state = GTK_CUPS_GET_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;      return;    }  httpClearFields (request->http);#ifdef HAVE_HTTP_AUTHSTRING  httpSetField (request->http, HTTP_FIELD_AUTHORIZATION, request->http->authstring);#endif  if (httpGet (request->http, request->resource))    {      if (httpReconnect (request->http))        {          request->state = GTK_CUPS_GET_DONE;          request->poll_state = GTK_CUPS_HTTP_IDLE;	           /* TODO: should add a status or error code for failed GET */           gtk_cups_result_set_error (request->result,                                      GTK_CUPS_ERROR_GENERAL,                                     0,                                     0,                                     "Failed Get");        }      request->attempts++;      return;        }          request->attempts = 0;  request->state = GTK_CUPS_GET_CHECK;  request->poll_state = GTK_CUPS_HTTP_READ;    request->ipp_request->state = IPP_IDLE;}static void _get_check (GtkCupsRequest *request){  http_status_t http_status;  GTK_NOTE (PRINTING,            g_print ("CUPS Backend: %s\n", G_STRFUNC));  http_status = request->last_status;  request->poll_state = GTK_CUPS_HTTP_READ;  if (http_status == HTTP_CONTINUE)    {      goto again;     }  else if (http_status == HTTP_UNAUTHORIZED)    {      /* TODO: callout for auth */      g_warning ("NOT IMPLEMENTED: We need to prompt for authorization in a non blocking manner");      request->state = GTK_CUPS_GET_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;      /* TODO: should add a status or error code for not implemented */       gtk_cups_result_set_error (request->result,                                  GTK_CUPS_ERROR_GENERAL,                                 0,                                 0,                                 "Can't prompt for authorization");      return;    }  else if (http_status == HTTP_UPGRADE_REQUIRED)    {      /* Flush any error message... */      httpFlush (request->http);      cupsSetEncryption (HTTP_ENCRYPT_REQUIRED);      request->state = GTK_CUPS_POST_CONNECT;      /* Reconnect... */      httpReconnect (request->http);      /* Upgrade with encryption... */      httpEncryption (request->http, HTTP_ENCRYPT_REQUIRED);       request->attempts++;      goto again;    }  else if (http_status != HTTP_OK)    {      int http_errno;      http_errno = httpError (request->http);      if (http_errno == EPIPE)        request->state = GTK_CUPS_GET_CONNECT;      else        {          request->state = GTK_CUPS_GET_DONE;          gtk_cups_result_set_error (request->result,                                     GTK_CUPS_ERROR_HTTP,                                     http_status,                                     http_errno,                                      "HTTP Error in GET %s",                                      g_strerror (http_errno));          request->poll_state = GTK_CUPS_HTTP_IDLE;          httpFlush (request->http);          return;        }      request->poll_state = GTK_CUPS_HTTP_IDLE;      httpFlush (request->http);      httpClose (request->http);      request->last_status = HTTP_CONTINUE;      request->http = NULL;      return;    }  else    {      request->state = GTK_CUPS_GET_READ_DATA;      return;    } again:  http_status = HTTP_CONTINUE;  if (httpCheck (request->http))    http_status = httpUpdate (request->http);  request->last_status = http_status;}static void _get_read_data (GtkCupsRequest *request){  char buffer[_GTK_CUPS_MAX_CHUNK_SIZE];  gsize bytes;  gsize bytes_written;  GIOStatus io_status;  GError *error;  GTK_NOTE (PRINTING,            g_print ("CUPS Backend: %s\n", G_STRFUNC));  error = NULL;  request->poll_state = GTK_CUPS_HTTP_READ;#if HAVE_CUPS_API_1_2  bytes = httpRead2 (request->http, buffer, sizeof (buffer));#else  bytes = httpRead (request->http, buffer, sizeof (buffer));#endif /* HAVE_CUPS_API_1_2 */  GTK_NOTE (PRINTING,            g_print ("CUPS Backend: %i bytes read\n", bytes));    if (bytes == 0)    {      request->state = GTK_CUPS_GET_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;      return;    }    io_status =    g_io_channel_write_chars (request->data_io,                               buffer, 			      bytes, 			      &bytes_written,			      &error);  if (io_status == G_IO_STATUS_ERROR)    {      request->state = GTK_CUPS_POST_DONE;      request->poll_state = GTK_CUPS_HTTP_IDLE;          gtk_cups_result_set_error (request->result,                                 GTK_CUPS_ERROR_IO,                                 io_status,                                 error->code,                                  error->message);      g_error_free (error);    }}gbooleangtk_cups_request_is_done (GtkCupsRequest *request){  return (request->state == GTK_CUPS_REQUEST_DONE);}gbooleangtk_cups_result_is_error (GtkCupsResult *result){  return result->is_error;}ipp_t *gtk_cups_result_get_response (GtkCupsResult *result){  return result->ipp_response;}GtkCupsErrorTypegtk_cups_result_get_error_type (GtkCupsResult *result){  return result->error_type;}intgtk_cups_result_get_error_status (GtkCupsResult *result){  return result->error_status;}intgtk_cups_result_get_error_code (GtkCupsResult *result){  return result->error_code;}const char *gtk_cups_result_get_error_string (GtkCupsResult *result){  return result->error_msg; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -