Fetching ejabberd MUC members list - xmpp

There seem to be some threads around this and it seems very obvious an issue to be a problem, but somehow in MUCs / rooms created by my ejabberd mobile clients, the creator / owner is able to fetch the members list but when I fetch the same from the members, there is an administrative privileges required error.
Below are the request and response stanzas as well as the room options. Can someone advise please if there is something I'm overlooking here ... many thanks?
Request from member:
<iq
type="get"
to="1479313326166_what%20a%20day#conference.example.com"
id="7BB7F8C8-B47F-4C0C-9E4D-8CAC3A5287FF">
<query xmlns="http://jabber.org/protocol/muc#admin">
<item
affiliation="member">
</item>
</query>
</iq>
Response to member:
<iq xmlns="jabber:client"
from="1479313326166_what%20a%20day#conference.example.com"
to="group-member#example.com/9A36B83F-0B1B-484E-BFB2-C0F1C7148274"
id="7BB7F8C8-B47F-4C0C-9E4D-8CAC3A5287FF"
type="error">
<query xmlns="http://jabber.org/protocol/muc#admin">
<item affiliation="member"></item>
</query>
<error code="403" type="auth">
<forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></forbidden>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
Administrator privileges required
</text>
</error>
</iq>
Room options:
> /sbin/ejabberdctl get_room_options 1479313326166_what%20a%20day conference.example.com
title
description
allow_change_subj true
allow_query_users true
allow_private_messages true
allow_private_messages_from_visitors anyone
allow_visitor_status true
allow_visitor_nickchange true
public true
public_list true
persistent true
moderated true
captcha_protected false
members_by_default true
members_only true
allow_user_invites false
allow_subscription true
password_protected false
password
anonymous true
presence_broadcast [moderator,participant,visitor]
allow_voice_requests true
voice_request_min_interval 1800
max_users 200
logging false
vcard <vCard xmlns='vcard-temp'><NICKNAME>What a day</NICKNAME><NOTE/></vCard>
captcha_whitelist {0,nil}
mam false

I tried configure a room via ConfigurationForm and ServerDefaultConfig, fortunetely never got your error and fetchMembers always works fine. There might be some very silly stuff that hard to find out. Maybe try to clear the db or restart the server to start over.
<x xmlns=\"jabber:x:data\" type=\"form\">
<title>Configuration of room 1479231695#conference.192.168.100.226</title>
<field type=\"hidden\" var=\"FORM_TYPE\">
<value>http://jabber.org/protocol/muc#roomconfig</value>
</field>
<field type=\"text-single\" label=\"Room title\" var=\"muc#roomconfig_roomname\">
<value></value>
</field>
<field type=\"text-single\" label=\"Room description\" var=\"muc#roomconfig_roomdesc\">
<value></value>
</field>
<field type=\"boolean\" label=\"Make room persistent\" var=\"muc#roomconfig_persistentroom\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Make room public searchable\" var=\"muc#roomconfig_publicroom\">
<value>0</value>
</field>
<field type=\"boolean\" label=\"Make participants list public\" var=\"public_list\">
<value>0</value>
</field>
<field type=\"boolean\" label=\"Make room password protected\" var=\"muc#roomconfig_passwordprotectedroom\">
<value>0</value>
</field>
<field type=\"text-private\" label=\"Password\" var=\"muc#roomconfig_roomsecret\">
<value></value>
</field>
<field type=\"list-single\" label=\"Maximum Number of Occupants\" var=\"muc#roomconfig_maxusers\">
<value>200</value>
<option label=\"5\">
<value>5</value>
</option>
<option label=\"10\">
<value>10</value>
</option>
<option label=\"20\">
<value>20</value>
</option>
<option label=\"30\">
<value>30</value>
</option>
<option label=\"50\">
<value>50</value>
</option>
<option label=\"100\">
<value>100</value>
</option>
<option label=\"200\">
<value>200</value>
</option>
</field>
<field type=\"list-single\" label=\"Present real Jabber IDs to\" var=\"muc#roomconfig_whois\">
<option label=\"moderators only\">
<value>moderators</value>
</option>
<option label=\"anyone\">
<value>anyone</value>
</option>
<value>anyone</value>
</field>
<field type=\"list-multi\" label=\"Roles for which Presence is Broadcasted\" var=\"muc#roomconfig_presencebroadcast\">
<value>moderator</value>
<value>participant</value>
<value>visitor</value>
<option label=\"Moderator\">
<value>moderator</value>
</option>
<option label=\"Participant\">
<value>participant</value>
</option>
<option label=\"Visitor\">
<value>visitor</value>
</option>
</field>
<field type=\"boolean\" label=\"Make room members-only\" var=\"muc#roomconfig_membersonly\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Make room moderated\" var=\"muc#roomconfig_moderatedroom\">
<value>0</value>
</field>
<field type=\"boolean\" label=\"Default users as participants\" var=\"members_by_default\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow users to change the subject\" var=\"muc#roomconfig_changesubject\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow users to send private messages\" var=\"allow_private_messages\">
<value>1</value>
</field>
<field type=\"list-single\" label=\"Allow visitors to send private messages to\" var=\"allow_private_messages_from_visitors\">
<value>anyone</value>
<option label=\"nobody\">
<value>nobody</value>
</option>
<option label=\"moderators only\">
<value>moderators</value>
</option>
<option label=\"anyone\">
<value>anyone</value>
</option>
</field>
<field type=\"boolean\" label=\"Allow users to query other users\" var=\"allow_query_users\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow users to send invites\" var=\"muc#roomconfig_allowinvites\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow visitors to send status text in presence updates\" var=\"muc#roomconfig_allowvisitorstatus\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow visitors to change nickname\" var=\"muc#roomconfig_allowvisitornickchange\">
<value>1</value>
</field>
<field type=\"boolean\" label=\"Allow visitors to send voice requests\" var=\"muc#roomconfig_allowvoicerequests\">
<value>1</value>
</field>
<field type=\"text-single\" label=\"Minimum interval between voice requests (in seconds)\" var=\"muc#roomconfig_voicerequestmininterval\">
<value>1800</value>
</field>
<field type=\"jid-multi\" label=\"Exclude Jabber IDs from CAPTCHA challenge\" var=\"muc#roomconfig_captcha_whitelist\"></field>
</x>
mod_muc:
## host: "conference.#HOST#"
access:
- allow
access_admin:
- allow: admin
access_create: muc_create
access_persistent: muc_create
history_size: 0
default_room_options:
allow_user_invites: true
anonymous: false
members_by_default: true
members_only: true
moderated: false
persistent: true
public: false
public_list: false

Related

Jabber Search for advanced user search

I'm trying to search user by username in my xmpp server, but the result always contains no items...
for getting the form format I send:
<iq type='get' to='search.MY_SERVER' xmlns='jabber:client'>
<query xmlns='jabber:iq:search'/>
</iq>
and received:
<iq xmlns="jabber:client" type="result" id="3:sendIQ" from="search.MY_SERVER" to="ID#MY_SERVER/7acf23bb">
<query xmlns="jabber:iq:search">
<instructions>The following fields are available for searching. Wildcard (*) characters are allowed as part of the query.</instructions>
<first/><last/><nick/><email/>
<x xmlns="jabber:x:data" type="form">
<title>Advanced User Search</title>
<instructions>The following fields are available for searching. Wildcard (*) characters are allowed as part of the query.</instructions>
<field var="FORM_TYPE" type="hidden">
<value>jabber:iq:search</value>
</field>
<field var="search" type="text-single" label="Search">
<required/>
</field>
<field var="Username" type="boolean" label="Username">
<value>1</value>
</field>
<field var="Name" type="boolean" label="Name">
<value>1</value>
</field>
<field var="Email" type="boolean" label="Email">
<value>1</value>
</field>
</x>
</query>
</iq>
and then I send:
<iq type='set' to='search.MY_SERVER' xmlns='jabber:client'>
<query xmlns='jabber:iq:search'>
<x xmlns='jabber:x:data' type='submit'>
<field type='hidden' var='FORM_TYPE'>
<value>jabber:iq:search</value>
</field>
<field var='search'>
<value>*</value>
</field>
</x>
</query>
</iq>
but received no items:
<iq xmlns="jabber:client" type="result" id="4:sendIQ" from="search.MY_SERVER" to="ID#MY_SERVER/7acf23bb">
<query xmlns="jabber:iq:search">
<x xmlns="jabber:x:data" type="result">
<field var="FORM_TYPE" type="hidden"/>
<reported>
<field var="jid" type="jid-single" label="JID"/>
<field var="Username" type="text-single" label="Username"/>
<field var="Name" type="text-single" label="Name"/>
<field var="Email" type="text-single" label="Email"/>
</reported>
</x>
</query>
</iq>
Does someone know what went wrong?
I have found the answer,send following request will do the trick:
<iq type='set' to='search.MY_SERVER' xmlns='jabber:client'>
<query xmlns='jabber:iq:search'>
<x xmlns='jabber:x:data' type='submit'>
<field var='search'>
<value>SEARCH_CRITERIA</value>
</field>
<field var='Username'>
<value>1</value>
</field>
</x>
</query>
</iq>

xmpp/ejabberd user search commend returning empty fields

this is my query to ejabberd server running on localhost using window telnet to search whether user exists or not
local server host name is durgesh-laptop
<iq type="set" id="searchByUserName" to="vjud.durgesh-laptop"from="durgesh#durgeshlaptop">
<query xmlns="jabber:iq:search">
<x xmlns="jabber:x:data" type="submit">
<field type="hidden" var="FROM_TYPE">
<value>jabber:iq:search</value>
</field>
<field var="user">
<value>anand</value>
</field></x></query></iq>
server response is:-
<iq from='vjud.durgesh-laptop' to='durgesh#durgesh-laptop/Telnet Client' id='searchByUserName' type='result'>
<query xmlns='jabber:iq:search'>
<x xmlns='jabber:x:data' type='result'>
<title>Search Results for vjud.durgesh-laptop</title>
<reported><field type='text-single' label='Jabber ID' var='jid'/>
<field type='text-single' label='Full Name' var='fn'/>
<field type='text-single' label='Name' var='first'/>
<field type='text-single' label='Middle Name' var='middle'/>
<field type='text-single' label='Family Name' var='last'/>
<field type='text-single' label='Nickname' var='nick'/>
<field type='text-single' label='Birthday' var='bday'/>
<field type='text-single' label='Country' var='ctry'/>
<field type='text-single' label='City' var='locality'/>
<field type='text-single' label='Email' var='email'/>
<field type='text-single' label='Organization Name' var='orgname'/>
<field type='text-single' label='Organization Unit' var='orgunit'/></reported></x>
</query></iq>
it contain empty fields. No matter whether user exists or not it always response with empty field values
please tell me where i am doing wrong.

The great OpenERP 7 directory structure mystery

I am currently deploying OpenERP 7 on a CentOS 6.4 machine.
I'm virtualizing the whole thing so that I can backup the whole system if I mess up.
Everything seems to be fine, I changed my models, my views, but it's been 2 days I've been banging my head against a seemingly impossible problem.
My deployment is for a book factory, so the product needed to be customized (number of pages, binding type , and so forth...)
In the new product view, I need something that can sum to fields x_colorpages and x_bwpages to populate a third field: x_totalpages. Easy huh?
I've got my XML , product.normal.form view based on the product.poduct object
When I change the value in "x_paginecolori" or "xpagineBN" it should automatically trigger the onchange function.
So I went in the product module code and coded my cal_change_event
In the python file product.py located in:
/usr/lib/python2.6/site-packages/openerp-7.0_20130524_231019-py2.6.egg/openerp/addons/account/product.py
def cal_change_event(self, cr, uid, ids, x_PagineColori, x_PagineBN):
res = {}
sum = 0
if not x_PagineColori:
return {}
else if not x_PagineBN:
return {}
else:
sum = x_PagineColori + x_PagineBN
res={'x_pagine':sum }
return {'value':res}
NO matter what i do , the onchange event will allways trigger a warning popup:
File "/usr/lib/python2.6/site-packages/openerp-7.0_20130524_231019-py2.6.egg/openerp/osv/osv.py", line 185, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
AttributeError: 'product.product' object has no attribute 'cal_change_event'
It seems to me that the function is not seen, where should I put it?
How can Product.Product not have this attribute if I placed it in the class inside product.py?
I grep'd the whole CENTOS installation in search for multiple instances of openerp , or to see if I missed something about product.py
It seems that the product.py is not the right file, even if I erase other On_change functions, nothing bad really happens.
But the directory must be right, because the error log gives me that same location in the debug popup window.
Should I be building a custom module fron scratch to make this work? Is it forbidden somehow to modify the standard product module?
Thanks in advance for any insight, my brain is defaulting on this one.
here is my Xml:
<?xml version="1.0"?>
<form string="Product" version="7.0">
<sheet>
<div>
<label for="x_partner2" string="Cliente Referente del prodotto"/>
<field name="x_partner2" />
</div>
<field name="image_medium" widget="image" class="oe_avatar oe_left"/>
<div class="oe_title">
<div class="oe_edit_only">
<label for="name" string="Product Name"/>
</div>
<h1>
<field name="name"/>
</h1>
<label for="categ_id" class="oe_edit_only"/>
<h2><field name="categ_id"/></h2>
<div name="options" groups="base.group_user">
<field name="sale_ok"/>
<label for="sale_ok"/>
</div>
</div>
<div class="oe_right oe_button_box" name="buttons">
</div>
<notebook>
<page string="Information">
<group>
<group>
<field name="type"/>
<field name="uom_id" on_change="onchange_uom(uom_id,uom_po_id)" groups="product.group_uom"/>
<field name="list_price"/>
</group>
<group>
<field name="default_code"/>
<label for="ean13"/>
<div name="ean">
<field name="ean13" placeholder="e.g. 5901234123457"/>
</div>
</group>
<group>
<field groups="product.group_product_variant" name="variants"/>
<field name="price_margin" groups="product.group_product_variant"/>
<field name="price_extra" groups="product.group_product_variant"/>
</group>
</group>
<field name="description" placeholder="describe the product characteristics..."/>
</page>
<page string="Dati del volume Universal Book">
<group>
<group>
<field name="x_DataCreazione" />
<field name="x_DataUltimaModifica" />
<field name="x_Autore" />
<field name="x_Larghezza"/>
<field name="x_Altezza" />
<field name="x_Dorso"/>
<field name="x_Rilegatura" />
<field name="x_volumiformati" />
</group>
</group>
<group>
<field name="x_PagineColori" on_change="cal_change_event(x_PagineColori,x_PagineBN)" />
<field name="x_PagineBN" on_change="cal_change_event(x_PagineColori,x_PagineBN)" />
<field name="x_pagine" />
</group>
<group>
<field name="x_prezzo" />
</group>
</page>
<page string="Copertina">
<group>
<group>
<field name="x_TipoCartaCopertina"/>
<field name="x_TipoStampaCopertina"/>
<field name="x_TipoFFR"/>
<field name="x_PlastificazioneCopertina" />
<field name="x_NumeroCopertinePerPagina" />
</group>
<group>
<field name="x_TipoCartaSovracopertina"/>
<field name="x_TipoStampaScopertina"/>
<field name="x_TipoFFRSovracopertina"/>
<field name="x_PlastificazioneSovracopertina"/>
</group>
</group>
<label for="x_aletta" string="Libro con alette?"/>
<field name="x_aletta" />
<label for="x_Note" string="Note"/>
<field name="x_Note" />
</page>
<page string="Margini">
<group>
<field name="x_pagriferimento"/>
<field name="x_MargineDestro"/>
<field name="x_MargineDestro"/>
<field name="x_MargineInferiore" />
<field name="x_MargSinistro" />
<field name="x_MargineSuperiore"/>
<field name="x_RiferimentoLIFRE" />
<field name="x_MergineSuperioreLIFRE" />
<field name="x_MargineInferioreLIFRE" />
</group>
</page>
<page string="Procurements" groups="base.group_user">
<group name="procurement">
<group name="general">
<field name="cost_method" groups="product.group_costing_method"/>
<field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
</group>
<group name="procurement_uom" groups="product.group_uom" string="Purchase">
<field name="uom_po_id"/>
</group>
</group>
<separator string="Description for Suppliers"/>
<field name="description_purchase" placeholder="This note will be displayed on requests for quotation..."/>
</page>
<page string="Inventory" groups="base.group_user">
<group name="inventory">
<group name="status" string="Status">
<field name="state"/>
<field name="product_manager"/>
</group>
<group name="Weights" groups="product.group_stock_packaging" string="Weights">
<field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
<field name="weight" attrs="{'readonly':[('type','=','service')]}"/>
<field name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
</group>
</group>
</page>
<page string="Sales" attrs="{'invisible':[('sale_ok','=',False)]}">
<group name="sale">
<group string="Sale Conditions">
<label for="warranty"/>
<div>
<field name="warranty" class="oe_inline"/> months
</div>
</group>
<group groups="product.group_uos" string="Unit of Measure">
<field name="uos_id"/>
<field name="uos_coeff"/>
<field name="mes_type"/>
</group>
</group>
<field name="packaging" groups="product.group_stock_packaging">
<form string="Packaging" version="7.0">
<group col="4">
<field name="ean"/>
<field name="sequence" invisible="1"/>
<newline/>
<field name="qty"/>
<field name="ul"/>
<field name="weight_ul"/>
<separator colspan="4" string="Palletization"/>
<field name="ul_qty"/>
<field name="rows"/>
<field name="weight"/>
<separator colspan="4" string="Pallet Dimension"/>
<field name="height"/>
<field name="width"/>
<field name="length"/>
</group>
<separator colspan="4" string="Description"/>
<field name="name"/>
</form>
</field>
<separator string="Description for Quotations"/>
<field name="description_sale" placeholder="note to be displayed on quotations..."/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
It's not forbidden to modify the standard modules, but it is generally recommended to write your own modules to extend OpenERP.
I don't know how much experience you've got with OpenERP (if you are new to OpenERP, the problem could be caused by very simple mistakes), so forgive me for assuming you are a newbie.
Have you restarted OpenERP and reinstalled the product module?
Is the cal_change_event() method defined in a class whose _name = "product.product" ?
Could you post your XML code? The problem could be nothing to do with your Python code.
All the code here works FINE. The problem seemed to be my CENTOS install.
This code works correctly on WINDOWS and a new XUBUNTU Machine I just made.
Unfortunately the reason why it didn't work in CentOS still eludes me.
I'm closing this topic, hopefully the code pf my .XML and .PY can be a useful template for all those who wish to have personalized fields in their products and have them interactively change. thanks Wenshan for your assistance, as you noticed in the beginning, nothing was wrong with the code.

Execute QTP TestSet from REST

Does anyone have an xml block that will kick off a testset (curl example would be great)?
The REST documentation in HP-ALM does not show how to execute a testset from REST. There is a description of how to create a defect. The secondary problem is that the docs suggest that required fields include cycle_id and testcycl_id for which I can't find a way to get their values.
Specifically - I want to create a Run object via POST
thanks
ALM REST API Does not have the feature to kickoff Automated tests. We need to go with OTA API for the same.
By OTA try this code in VBS.
Set tdc = CreateObject("TDAPIOLE80.TDConnection")
tdc.InitConnectionEx "https://URLALM"
tdc.login "USer", "pass"
tdc.Connect "DOMAIN", "PROJECT"
Set objShell = CreateObject("WScript.Shell")
'Set TSetFact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tsFolder = tsTreeMgr.NodeByPath("your tree")
Set tsList = tsFolder.FindTestSets("testSet")
Set theTestSet = tsList.Item(1) 'list of testSets
Set Scheduler = theTestSet.StartExecution("")
if err.number <> 0 then
'msgbox err.Description
Else
Scheduler.RunAllLocally = True
Scheduler.Run
Set execstatus = Scheduler.ExecutionStatus
Do While RunFinished = False
execstatus.RefreshExecStatusInfo "all", True
RunFinished = execstatus.Finished
Set EventsList = execstatus.EventsList
For Each ExecEventInfoObj In EventsList
strNowEvent = ExecEventInfoObj.EventType
Next
For i = 1 To execstatus.Count
Set TestExecStatusobj = execstatus.Item(i)
intTestid = TestExecStatusobj.TestInstance
Next
Loop
execstatus.RefreshExecStatusInfo "all", True
End if
Set tsTreeMgr = nothing
Set tsFolder = nothing
Set tsList = nothing
Set theTestSet =nothing
tdc.Disconnect
tdc.Logout
tdc.ReleaseConnection
Set tdc = Nothing
Through Rest Api,You can create run for each of the test instance in a test set and update each of the step through run-steps of that particular test case while execution.
While creating the run you have update following mandatory field:-
http://<server>/qcbin//rest/domains/<>/projects/<>/runs/
<Entity Type=\"run\"><Fields>
<Field Name=\"name\"><Value>Run_2015-04-15</Value></Field>
<Field Name=\"testcycl-id\"><Value>573269</Value></Field>
<Field Name=\"cycle-id\"><Value>4363</Value></Field>
<Field Name=\"test-id\"><Value>29201</Value></Field>
<Field Name=\"subtype-id\"><Value>hp.qc.run.MANUAL</Value></Field>
<Field Name=\"owner\"><Value>owner</Value></Field>
</Fields></Entity>
After creating run ,you need to fetch Run-ID{Run ID} from the generated Response Xml
/qcbin/rest/domains/{domain}/projects/{project}/runs/?query={name[Run_2015-04-15]}-use this url to get {Run ID}
will be used to update steps.Used in following Url
/qcbin/rest/domains/{domain}/projects/{project}/runs/{Run ID}/
For run-steps:-
To get the ID for the particular Step (like Step 1,2...).Use following query url.
/qcbin/rest/domains/{domain}/projects/{project}/runs/{Run ID}/run-steps/?query={name[Step 1]}-use this url to get Step ID {ID}.
To Update Step:-
1. Use following url:-
/qcbin/rest/domains/{domain}/projects/{project}/runs/{Run ID}/run-steps/{ID}
2.Generate the Xml and use post method to update status field.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <Entity Type="run-step">
+ <ChildrenCount>
<Value>0</Value>
</ChildrenCount>
- <Fields>
+ <Field Name="test-id">
<Value>6</Value>
</Field>
+ <Field Name="comp-status">
<Value />
</Field>
<Field Name="rel-obj-id" />
<Field Name="obj-id" />
+ <Field Name="has-linkage">
<Value>N</Value>
</Field>
+ <Field Name="execution-date">
<Value>2017-09-25</Value>
</Field>
+ <Field Name="path">
<Value />
</Field>
+ <Field Name="desstep-id">
<Value>1031</Value>
</Field>
+ <Field Name="attachment">
<Value>Y</Value>
</Field>
+ <Field Name="has-picture">
<Value>N</Value>
</Field>
<Field Name="tree-parent-id" />
+ <Field Name="id">
<Value>24820</Value>
</Field>
+ <Field Name="component-data">
<Value />
</Field>
+ <Field Name="bpt-path">
<Value />
</Field>
+ <Field Name="actual">
<Value><html><body> Results match expected </body></html></Value>
</Field>
+ <Field Name="step-order">
<Value>1</Value>
</Field>
<Field Name="level" />
+ <Field Name="expected">
<Value><html><body> <div align="left"> <font face="Arial"><span style="font-size:8pt">Successful launch of website</span></font> </div> </body></html></Value>
</Field>
<Field Name="line-no" />
+ <Field Name="comp-subtype-name">
<Value />
</Field>
- <Field Name="extended-reference">
<Value />
</Field>
- <Field Name="name">
<Value>Step 1</Value>
</Field>
+ <Field Name="execution-time">
<Value>03:56:29</Value>
</Field>
+ <Field Name="bpta-condition">
<Value />
</Field>
+ <Field Name="user-template-01">
<Value>Website Tester</Value>
</Field>
+ <Field Name="parent-id">
<Value>1522</Value>
</Field>
+ <Field Name="user-template-03">
<Value />
</Field>
+ <Field Name="bpt-facet-type">
<Value />
</Field>
+ <Field Name="user-template-04">
<Value>kama</Value>
</Field>
- <Field Name="status">
<Value>Passed</Value>
</Field>
</Fields>

get offline messages of publisher

I have implemented XEP-0060 pubsub using openfire , i am able to publish messages over an existing node and i have other subscribers who can get those published messages.
now the issue is , i am not be able to receiver the old messages i mean if the subscribers are offline and when they come back online then how can i get the old messages which were being published by the publisher long time back.
My node on which publishers are publishing is configured as follows
<iq from="pubsub.example.com" type="result" id="meta1" to="lime#example.com/localhost">
<query xmlns="http://jabber.org/protocol/disco#info" node="mynode/loc">
<identity category="pubsub" type="leaf"/>
<feature var="http://jabber.org/protocol/pubsub"/>
<feature var="http://jabber.org/protocol/disco#info"/>
<x xmlns="jabber:x:data" type="result">
<field type="hidden" var="FORM_TYPE">
<value>http://jabber.org/protocol/pubsub#meta-data</value>
</field>
<field type="text-single" label="Short name for the node" var="pubsub#title">
<value/>
</field>
<field type="text-single" label="Description of the node" var="pubsub#description">
<value/>
</field>
<field type="boolean" label="Allow subscriptions to node" var="pubsub#subscribe">
<value>1</value>
</field>
<field type="boolean" label="New subscriptions require configuration" var="pubsub#subscription_required">
<value>0</value>
</field>
<field type="boolean" label="Deliver payloads with event notifications" var="pubsub#deliver_payloads">
<value>1</value>
</field>
<field type="boolean" label="Notify subscribers when the node configuration changes" var="pubsub#notify_config">
<value>1</value>
</field>
<field type="boolean" label="Notify subscribers when the node is deleted" var="pubsub#notify_delete">
<value>1</value>
</field>
<field type="boolean" label="Notify subscribers when items are removed from the node" var="pubsub#notify_retract">
<value>1</value>
</field>
<field type="boolean" label="Only deliver notifications to available users" var="pubsub#presence_based_delivery">
<value>0</value>
</field>
<field type="text-single" label="Type of payload data to be provided at this node" var="pubsub#type">
<value/>
</field>
<field type="text-single" label="Message body XSLT" var="pubsub#body_xslt">
<value/>
</field>
<field type="text-single" label="Payload XSLT" var="pubsub#dataform_xslt">
<value/>
</field>
<field type="list-single" label="Specify who may subscribe and retrieve items" var="pubsub#access_model">
<option>
<value>authorize</value>
</option>
<option>
<value>open</value>
</option>
<option>
<value>presence</value>
</option>
<option>
<value>roster</value>
</option>
<option>
<value>whitelist</value>
</option>
<value>open</value>
</field>
<field type="list-single" label="Publisher model" var="pubsub#publish_model">
<option>
<value>publishers</value>
</option>
<option>
<value>subscribers</value>
</option>
<option>
<value>open</value>
</option>
<value>open</value>
</field>
<field type="list-multi" label="Roster groups allowed to subscribe" var="pubsub#roster_groups_allowed"/>
<field type="jid-multi" label="People to contact with questions" var="pubsub#contact"/>
<field type="text-single" label="Default language" var="pubsub#language">
<value>English</value>
</field>
<field type="jid-multi" label="Node owners" var="pubsub#owner">
<value>mypublisher#example.com</value>
</field>
<field type="jid-multi" label="Node publishers" var="pubsub#publisher"/>
<field type="list-single" label="Select entity that should receive replies to items" var="pubsub#itemreply">
<value>owner</value>
</field>
<field type="jid-multi" label="Multi-user chat room to which replies should be sent" var="pubsub#replyroom"/>
<field type="jid-multi" label="Users to which replies should be sent" var="pubsub#replyto"/>
<field type="boolean" label="Send items to new subscribers" var="pubsub#send_item_subscribe">
<value>1</value>
</field>
<field type="boolean" label="Persist items to storage" var="pubsub#persist_items">
<value>1</value>
</field>
<field type="text-single" label="Max number of items to persist" var="pubsub#max_items">
<value>5</value>
</field>
<field type="text-single" label="Max payload size in bytes" var="pubsub#max_payload_size">
<value>5120</value>
</field>
</x>
</query>
</iq>
yeah i got it , when the subscriber gets online using following stanza he/she can retrive the old published items
subid is must in this case
<iq type='get'
from='subscriber#example.com'
to='pubsub.example.com'
id='items1'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<items node='mynode'
subid="8839399494949"/>
</pubsub>
</iq>