Index: services.resource_build.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/services/services.resource_build.inc,v
retrieving revision 1.3
diff -u -r1.3 services.resource_build.inc
--- services.resource_build.inc	24 Dec 2010 17:25:13 -0000	1.3
+++ services.resource_build.inc	16 Jan 2011 03:34:02 -0000
@@ -208,6 +208,7 @@
   require_once("resources/system_resource.inc");
   require_once("resources/taxonomy_resource.inc");
   require_once("resources/user_resource.inc");
+  require_once("resources/queue_resource.inc");
 
   $resources = array();
 
@@ -217,6 +218,7 @@
   $resources += _system_resource_definition();
   $resources += _taxonomy_resource_definition();
   $resources += _user_resource_definition();
+  $resources += _queue_resource_definition();
 
   return $resources;
 }
Index: services.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/services/services.module,v
retrieving revision 1.15
diff -u -r1.15 services.module
--- services.module	15 Jan 2011 18:52:36 -0000	1.15
+++ services.module	16 Jan 2011 03:34:00 -0000
@@ -32,20 +32,20 @@
 function services_permission() {
   return array(
     'administer services' => array(
-      'title' => t('Administer services'), 
+      'title' => t('Administer services'),
       'description' => t('Configure and setup services module.'),
     ),
     // File resource permissions
     'get any binary files' => array(
-      'title' => t('Get any binary files'), 
+      'title' => t('Get any binary files'),
       'description' => t(''),
     ),
     'get own binary files' => array(
-      'title' => t('Get own binary files'), 
+      'title' => t('Get own binary files'),
       'description' => t(''),
     ),
     'save file information' => array(
-      'title' => t('Save file information'), 
+      'title' => t('Save file information'),
       'description' => t(''),
     ),
     // System resource permissions
@@ -54,7 +54,16 @@
       'description' => t(''),
     ),
     'set a system variable' => array(
-      'title' => t('Set a system variable'), 
+      'title' => t('Set a system variable'),
+      'description' => t(''),
+    ),
+    // Queue resource permissions
+    'put item on queue' => array(
+      'title' => t('Put item on queue'),
+      'description' => t(''),
+    ),
+    'retrieve item from queue' => array(
+      'title' => t('Retrieve item from queue'),
       'description' => t(''),
     ),
   );
@@ -175,10 +184,10 @@
 }
 
 /**
- * Access callback that always returns TRUE. 
+ * Access callback that always returns TRUE.
  *
- * This callback is necessary for services like login and logout that should 
- * always be wide open and accessible. 
+ * This callback is necessary for services like login and logout that should
+ * always be wide open and accessible.
  *
  * *** USE THIS WITH GREAT CAUTION ***
  *
@@ -468,7 +477,7 @@
         $controllers[] = $resource_name . '.' . $op;
       }
     }
- 
+
     // Handle extended operatios
     foreach ($ops as $op) {
       if (isset($res[$op])) {
@@ -498,10 +507,10 @@
 
   if (isset($resources[$resource_name])) {
     $res = $resources[$resource_name];
-    
+
     if (isset($res[$method])) {
       return $res[$method];
-    } 
+    }
     else {
       // Handle extended operatios
       foreach ($ops as $op) {
Index: resources/queue_resource.inc
===================================================================
RCS file: resources/queue_resource.inc
diff -N resources/queue_resource.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ resources/queue_resource.inc	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,83 @@
+<?php
+// $Id: $
+
+/**
+ * Define queue resources.
+ */
+function _queue_resource_definition() {
+  return array(
+    'queue' => array(
+      'retrieve' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/queue_resource'),
+        'callback' => '_queue_resource_retrieve',
+        'args' => array(
+          array(
+            'queue_name' => 'name',
+            'optional' => FALSE,
+            'source' => array('path' => 0),
+            'type' => 'string',
+            'description' => 'The queue to claim an item from',
+          ),
+        ),
+        'access arguments' => array('retrieve item from queue'),
+        'access arguments append' => FALSE,
+      ),
+      'create' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/queue_resource'),
+        'callback' => '_queue_resource_create',
+        'args' => array(
+          array(
+            'name' => 'queue_name',
+            'optional' => FALSE,
+            'source' => 'data',
+            'description' => 'The name of the queue to place the item on',
+            'type' => 'string',
+          ),
+          array(
+            'name' => 'item',
+            'optional' => FALSE,
+            'source' => 'data',
+            'description' => 'The item to place on the queue',
+            'type' => 'struct',
+          ),
+        ),
+        'access arguments' => array('put item on queue'),
+        'access arguments append' => FALSE,
+      ),
+    ),
+  );
+}
+
+/**
+ * Returns the results of a queue_claim_item() for the specified queue.
+ *
+ * @param $queue_name
+ *   String name of the queue to claim from.
+ * @return
+ *   Queue item claimed.
+ **/
+function _queue_resource_retrieve($queue_name) {
+  // Make sure every queue exists. There is no harm in trying to recreate an
+  // existing queue.
+  DrupalQueue::get($queue_name)->createQueue();
+  $queue = DrupalQueue::get($queue_name);
+  $item = $queue->claimItem();
+  $queue->deleteItem($item);
+
+  return !empty($item) ? $item : FALSE;
+}
+
+/**
+ * Creates a new queue item on the specific queue.
+ *
+ * @param $queue_name
+ *   String name of the queue to put the item on.
+ * @param $Item
+ *   Object or array  representing the datato be place on the queue.
+ **/
+function _queue_resource_create($queue_name, $item) {
+  $queue = DrupalQueue::get($queue_name);
+  $job = new stdClass();
+  $job->data = $item;
+  $queue->createItem($job);
+}
\ No newline at end of file
