Discussion:
How to edit users using SOAP
Sven Evensen
2012-07-01 20:52:42 UTC
Permalink
Our application is adding and deleting users using SOAP just fine, But I
want to edit name and sipPassword and I just cannot figure out how. I
aasume ManagerUser is to be used somehow.

Any tips?

Sven
--
*Sven Evensen, Operations Consultant*

*OnRelay*

Elizabeth House │ 39 York Road, London SE1 7NQ, UK │ +44 (0) 207 902 8123 │
mailto:***@onrelay.com <***@onrelay.com> │ www.onrelay.com


This electronic message transmission contains information from OnRelay,
Ltd., that may be confidential or privileged. The information is intended
solely for the recipient and use by any other party is not authorised. If
you are not the intended recipient, be aware that any disclosure, copying,
distribution or use of the contents of this information or any attachment,
is prohibited. If you have received this electronic transmission in error,
please notify us immediately by electronic mail (***@onrelay.com) and
delete this message, along with any attachments, from your computer.
Registered in England No 04006093 Š Registered Office 1st Floor, 236 Gray's
Inn Road, London WC1X 8HB
George Niculae
2012-07-01 20:58:30 UTC
Permalink
Post by Sven Evensen
Our application is adding and deleting users using SOAP just fine, But I
want to edit name and sipPassword and I just cannot figure out how. I aasume
ManagerUser is to be used somehow.
Any tips?
Use ManageUser same way you use it for deleting user but with edit
operation - you can pass sipPassword and userName/lastName/firstName
with an User object. Check sipxconfig.wsdl,
<xsd:element name="ManageUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="search" type="tns:UserSearch"
minOccurs="1" maxOccurs="1" />
<xsd:element name="edit" type="tns:Property"
maxOccurs="unbounded" />
<xsd:element name="deleteUser" type="xsd:boolean"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="addGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="removeGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="updateBranch" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

and User type


<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="userName" type="xsd:string" minOccurs="1"
maxOccurs="1" />
<xsd:element name="pintoken" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="lastName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="firstName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="sipPassword" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="aliases" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="emailAddress" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="groups" type="xsd:string" nillable="true"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="permissions" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="branchName" type="xsd:string"
nillable="true" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>


George
Todd Hodgen
2012-07-01 21:05:22 UTC
Permalink
Sven, Will any of this SOAP interface application that you have developed
be made available to the Open Source project? I suspect there are others
that could benefit from a resource such as this.

-----Original Message-----
From: sipx-users-***@list.sipfoundry.org
[mailto:sipx-users-***@list.sipfoundry.org] On Behalf Of George Niculae
Sent: Sunday, July 01, 2012 1:59 PM
To: Discussion list for users of sipXecs software
Subject: Re: [sipx-users] How to edit users using SOAP
Post by Sven Evensen
Our application is adding and deleting users using SOAP just fine, But
I want to edit name and sipPassword and I just cannot figure out how.
I aasume ManagerUser is to be used somehow.
Any tips?
Use ManageUser same way you use it for deleting user but with edit operation
- you can pass sipPassword and userName/lastName/firstName with an User
object. Check sipxconfig.wsdl,
<xsd:element name="ManageUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="search" type="tns:UserSearch"
minOccurs="1" maxOccurs="1" />
<xsd:element name="edit" type="tns:Property"
maxOccurs="unbounded" />
<xsd:element name="deleteUser" type="xsd:boolean"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="addGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="removeGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="updateBranch" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

and User type


<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="userName" type="xsd:string" minOccurs="1"
maxOccurs="1" />
<xsd:element name="pintoken" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="lastName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="firstName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="sipPassword" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="aliases" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="emailAddress" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="groups" type="xsd:string" nillable="true"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="permissions" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="branchName" type="xsd:string"
nillable="true" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>


George
Sven Evensen
2012-07-01 21:33:24 UTC
Permalink
I have not worked that much with this part of our code, but we in
general definitely want to contribute.
I will see what can be done (when I get update user to work!)

Sven
Post by Todd Hodgen
Sven, Will any of this SOAP interface application that you have developed
be made available to the Open Source project? I suspect there are others
that could benefit from a resource such as this.
-----Original Message-----
Sent: Sunday, July 01, 2012 1:59 PM
To: Discussion list for users of sipXecs software
Subject: Re: [sipx-users] How to edit users using SOAP
Post by Sven Evensen
Our application is adding and deleting users using SOAP just fine, But
I want to edit name and sipPassword and I just cannot figure out how.
I aasume ManagerUser is to be used somehow.
Any tips?
Use ManageUser same way you use it for deleting user but with edit operation
- you can pass sipPassword and userName/lastName/firstName with an User
object. Check sipxconfig.wsdl,
<xsd:element name="ManageUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="search" type="tns:UserSearch"
minOccurs="1" maxOccurs="1" />
<xsd:element name="edit" type="tns:Property"
maxOccurs="unbounded" />
<xsd:element name="deleteUser" type="xsd:boolean"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="addGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="removeGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="updateBranch" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
and User type
<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="userName" type="xsd:string" minOccurs="1"
maxOccurs="1" />
<xsd:element name="pintoken" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="lastName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="firstName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="sipPassword" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="aliases" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="emailAddress" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="groups" type="xsd:string" nillable="true"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="permissions" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="branchName" type="xsd:string"
nillable="true" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
George
_______________________________________________
sipx-users mailing list
List Archive: http://list.sipfoundry.org/archive/sipx-users/
_______________________________________________
sipx-users mailing list
List Archive: http://list.sipfoundry.org/archive/sipx-users/
--
*Sven Evensen, Operations Consultant*

*OnRelay*

Elizabeth House │ 39 York Road, London SE1 7NQ, UK │ +44 (0) 207 902 8123 │
mailto:***@onrelay.com <***@onrelay.com> │ www.onrelay.com


This electronic message transmission contains information from OnRelay,
Ltd., that may be confidential or privileged. The information is intended
solely for the recipient and use by any other party is not authorised. If
you are not the intended recipient, be aware that any disclosure, copying,
distribution or use of the contents of this information or any attachment,
is prohibited. If you have received this electronic transmission in error,
please notify us immediately by electronic mail (***@onrelay.com) and
delete this message, along with any attachments, from your computer.
Registered in England No 04006093 Š Registered Office 1st Floor, 236 Gray's
Inn Road, London WC1X 8HB
Sven Evensen
2012-07-02 00:13:53 UTC
Permalink
Thanks George, but I still dont get it, I am not that familiar with this
part of the code.

Our deleteUser looks like this

public void deleteSipXECSUser( String sipUserId ) {

log.debug (" removeSipXECSUser id : " + sipUserId);
ObjectFactory objectFactory = new ObjectFactory();

// Ask for user
UserSearch usearch = new UserSearch();
usearch.setByUserName( sipUserId );

ManageUser mUser = new ManageUser();
mUser.setSearch(usearch);
JAXBElement jelement = objectFactory.createManageUserDeleteUser( true );
mUser.setDeleteUser (jelement);

us.manageUser( mUser );
}

while our editUser looks like this:

public void editSipXECSUser(
String sipUserId, String sipUserPassword,
String firstName, String surName,
String oldGroupId, String newGroupId ) {

log.debug (" removeSipXECSUser id : " + sipUserId);

User existingUser = getCurrentUser ( sipUserId );

if( existingUser == null ) {
addSipXECSUser( sipUserId, sipUserPassword, firstName, surName, newGroupId
);
editUserToUserGroup ( sipUserId, oldGroupId, newGroupId );
return;
}

// Ask for user
UserSearch usearch = new UserSearch();
usearch.setByUserName( sipUserId );

ManageUser mUser = new ManageUser();
mUser.setSearch( usearch );

mUser.getEdit( ); //??

editUserToUserGroup (sipUserId, oldGroupId, newGroupId);
}
Post by Sven Evensen
Post by Sven Evensen
Our application is adding and deleting users using SOAP just fine, But I
want to edit name and sipPassword and I just cannot figure out how. I
aasume
Post by Sven Evensen
ManagerUser is to be used somehow.
Any tips?
Use ManageUser same way you use it for deleting user but with edit
operation - you can pass sipPassword and userName/lastName/firstName
with an User object. Check sipxconfig.wsdl,
<xsd:element name="ManageUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="search" type="tns:UserSearch"
minOccurs="1" maxOccurs="1" />
<xsd:element name="edit" type="tns:Property"
maxOccurs="unbounded" />
<xsd:element name="deleteUser" type="xsd:boolean"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="addGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="removeGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
<xsd:element name="updateBranch" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
and User type
<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="userName" type="xsd:string" minOccurs="1"
maxOccurs="1" />
<xsd:element name="pintoken" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="lastName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="firstName" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="sipPassword" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="aliases" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="emailAddress" type="xsd:string"
nillable="true" maxOccurs="1" />
<xsd:element name="groups" type="xsd:string" nillable="true"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="permissions" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="branchName" type="xsd:string"
nillable="true" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
George
_______________________________________________
sipx-users mailing list
List Archive: http://list.sipfoundry.org/archive/sipx-users/
--
*Sven Evensen, Operations Consultant*

*OnRelay*

Elizabeth House │ 39 York Road, London SE1 7NQ, UK │ +44 (0) 207 902 8123 │
mailto:***@onrelay.com <***@onrelay.com> │ www.onrelay.com


This electronic message transmission contains information from OnRelay,
Ltd., that may be confidential or privileged. The information is intended
solely for the recipient and use by any other party is not authorised. If
you are not the intended recipient, be aware that any disclosure, copying,
distribution or use of the contents of this information or any attachment,
is prohibited. If you have received this electronic transmission in error,
please notify us immediately by electronic mail (***@onrelay.com) and
delete this message, along with any attachments, from your computer.
Registered in England No 04006093 Š Registered Office 1st Floor, 236 Gray's
Inn Road, London WC1X 8HB
Kyle Haefner
2012-07-02 19:53:35 UTC
Permalink
Hi Sven,

Here is my code for Editing a User in c# maybe it will be of some help.

#region SoapEnvelope
soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
</soap:Envelope>");
XmlElement soapBody =
soapEnvelopeXml.CreateElement("soap:Body",
soapEnvelopeXml.DocumentElement.NamespaceURI);

XmlElement ManageUser =
soapEnvelopeXml.CreateElement("ManageUser",
"http://www.sipfoundry.org/2007/08/21/ConfigService");
XmlElement searchUser = soapEnvelopeXml.CreateElement("search");
XmlElement searchUserMethod =
soapEnvelopeXml.CreateElement("byUserName");

//Edit Elements we need one per property
XmlElement pinEdit = soapEnvelopeXml.CreateElement("edit");
XmlElement lastNameEdit = soapEnvelopeXml.CreateElement("edit");
XmlElement firstNameEdit = soapEnvelopeXml.CreateElement("edit");
XmlElement sipPasswordEdit = soapEnvelopeXml.CreateElement("edit");
XmlElement aliasesEdit = soapEnvelopeXml.CreateElement("edit");
XmlElement groupsEdit = soapEnvelopeXml.CreateElement("edit");

//Add values to searchmethod node
searchUserMethod.AppendChild(soapEnvelopeXml.CreateTextNode(user.extension));

//Setup propert/value pairs
XmlElement pinPropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement pinValueElement = soapEnvelopeXml.CreateElement("value");
XmlElement lastNamePropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement lastNameValueElement =
soapEnvelopeXml.CreateElement("value");
XmlElement firstNamePropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement firstNameValueElement =
soapEnvelopeXml.CreateElement("value");
XmlElement sipPasswordPropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement sipPasswordValueElement =
soapEnvelopeXml.CreateElement("value");
XmlElement aliasesPropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement aliasesValueElement =
soapEnvelopeXml.CreateElement("value");
XmlElement groupsPropertyElement =
soapEnvelopeXml.CreateElement("property");
XmlElement groupsValueElement =
soapEnvelopeXml.CreateElement("value");

//Set up property names
lastNamePropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("lastName"));
firstNamePropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("firstName"));
sipPasswordPropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("sipPassword"));
aliasesPropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("aliases"));
groupsPropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("groups"));
pinPropertyElement.AppendChild(soapEnvelopeXml.CreateTextNode("pintoken"));

//assign property values
lastNameValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(user.lname));
firstNameValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(user.fname));
sipPasswordValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(user.sipPassword));
aliasesValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(user.ename));
groupsValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(user.userGroup));

//must md5 has the pin
if (user.pintoken.Length > 0)
{
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash,
user.extension+":"+"acns.colostate.edu:"+user.pintoken);

pinValueElement.AppendChild(soapEnvelopeXml.CreateTextNode(hash));
}
}
//add search node
searchUser.AppendChild(searchUserMethod);

//append find elements to manager user
ManageUser.AppendChild(searchUser);

//Add property value nodes to actionElement
if (user.lname.Length > 0)
{
lastNameEdit.AppendChild(lastNamePropertyElement);
lastNameEdit.AppendChild(lastNameValueElement);
ManageUser.AppendChild(lastNameEdit);
}
if (user.fname.Length > 0)
{
firstNameEdit.AppendChild(firstNamePropertyElement);
firstNameEdit.AppendChild(firstNameValueElement);
ManageUser.AppendChild(firstNameEdit);
}
if (user.sipPassword.Length > 0)
{
sipPasswordEdit.AppendChild(sipPasswordPropertyElement);
sipPasswordEdit.AppendChild(sipPasswordValueElement);
ManageUser.AppendChild(sipPasswordEdit);
}
if (user.ename.Length > 0)
{
aliasesEdit.AppendChild(aliasesPropertyElement);
aliasesEdit.AppendChild(aliasesValueElement);
ManageUser.AppendChild(aliasesEdit);
}
if (user.userGroup.Length > 0)
{
RemoveUserGroups(user);
AddUserGroups(user);
}
if (user.pintoken.Length > 0)
{
pinEdit.AppendChild(pinPropertyElement);
pinEdit.AppendChild(pinValueElement);
ManageUser.AppendChild(pinEdit);
}



//add elements to soap body
soapBody.AppendChild(ManageUser);


//attach soap body to soap envelope
soapEnvelopeXml.DocumentElement.AppendChild(soapBody);


Kyle
Post by Sven Evensen
Thanks George, but I still dont get it, I am not that familiar with this
part of the code.
Our deleteUser looks like this
 public void deleteSipXECSUser( String sipUserId ) {
  log.debug (" removeSipXECSUser id : " + sipUserId);
  ObjectFactory objectFactory = new ObjectFactory();
// Ask for user
      UserSearch usearch = new UserSearch();
      usearch.setByUserName( sipUserId );
ManageUser mUser = new ManageUser();
mUser.setSearch(usearch);
JAXBElement jelement = objectFactory.createManageUserDeleteUser( true );
mUser.setDeleteUser (jelement);
us.manageUser( mUser );
  }
public void editSipXECSUser(
String sipUserId, String sipUserPassword,
String firstName, String surName,
String oldGroupId, String newGroupId ) {
log.debug (" removeSipXECSUser id : " + sipUserId);
User existingUser = getCurrentUser ( sipUserId );
if( existingUser == null ) {
addSipXECSUser( sipUserId, sipUserPassword, firstName, surName, newGroupId
);
editUserToUserGroup ( sipUserId, oldGroupId, newGroupId );
return;
}
// Ask for user
      UserSearch usearch = new UserSearch();
      usearch.setByUserName( sipUserId );
ManageUser mUser = new ManageUser();
mUser.setSearch( usearch );
mUser.getEdit( ); //??
editUserToUserGroup (sipUserId, oldGroupId, newGroupId);
  }
Post by George Niculae
Post by Sven Evensen
Our application is adding and deleting users using SOAP just fine, But I
want to edit name and sipPassword and I just cannot figure out how. I aasume
ManagerUser is to be used somehow.
Any tips?
Use ManageUser same way you use it for deleting user but with edit
operation - you can pass sipPassword and userName/lastName/firstName
with an User object. Check sipxconfig.wsdl,
      <xsd:element name="ManageUser">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:UserSearch"
minOccurs="1" maxOccurs="1" />
            <xsd:element name="edit" type="tns:Property"
maxOccurs="unbounded" />
            <xsd:element name="deleteUser" type="xsd:boolean"
nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="addGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="removeGroup" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="updateBranch" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
and User type
<xsd:complexType name="User">
        <xsd:sequence>
          <xsd:element name="userName" type="xsd:string" minOccurs="1"
maxOccurs="1" />
          <xsd:element name="pintoken" type="xsd:string"
nillable="true" maxOccurs="1" />
          <xsd:element name="lastName" type="xsd:string"
nillable="true" maxOccurs="1" />
          <xsd:element name="firstName" type="xsd:string"
nillable="true" maxOccurs="1" />
          <xsd:element name="sipPassword" type="xsd:string"
nillable="true" maxOccurs="1" />
          <xsd:element name="aliases" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="emailAddress" type="xsd:string"
nillable="true" maxOccurs="1" />
          <xsd:element name="groups" type="xsd:string" nillable="true"
minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="permissions" type="xsd:string"
nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="branchName" type="xsd:string"
nillable="true" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
George
_______________________________________________
sipx-users mailing list
List Archive: http://list.sipfoundry.org/archive/sipx-users/
--
Sven Evensen, Operations Consultant
OnRelay
Elizabeth House │ 39 York Road, London SE1 7NQ, UK │ +44 (0) 207 902 8123 │
This electronic message transmission contains information from OnRelay,
Ltd., that may be confidential or privileged. The information is intended
solely for the recipient and use by any other party is not authorised. If
you are not the intended recipient, be aware that any disclosure, copying,
distribution or use of the contents of this information or any attachment,
is prohibited. If you have received this electronic transmission in error,
delete this message, along with any attachments, from your computer.
Registered in England No 04006093 ¦ Registered Office 1st Floor, 236 Gray's
Inn Road, London WC1X 8HB
--
Kyle Haefner, M.S.
Communication Systems Programmer
Colorado State University
Fort Collins, CO
Phone: 970-491-1012
Email:  ***@colostate.edu

01010010 01100101 01100001 01101100 00100000 01101101 01100101
01101110 00100000 01110000 01110010 01101111 01100111 01110010
01100001 01101101 00100000 01101001 01101110 00100000 01100010
01101001 01101110 01100001 01110010 01111001 00101110
Loading...