--- parse_pai.c.orig	2007-10-25 11:32:59.000000000 +0200
+++ parse_pai.c	2007-10-25 11:47:15.000000000 +0200
@@ -19,13 +19,14 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
  
-#include "parse_from.h"
+#include "parse_pai.h"
 #include "parse_to.h"
 #include <stdlib.h>
 #include <string.h>
 #include "../dprint.h"
 #include "msg_parser.h"
 #include "../ut.h"
+#include "../errinfo.h"
 #include "../mem/mem.h"
 
  
@@ -76,3 +77,40 @@
  error:
  	return -1;
 }
+
+/**
+ * Parse P-Asserted-Identity header URI
+ */
+struct sip_uri *parse_pai_uri(struct sip_msg *msg)
+{
+        struct to_body *tb = NULL;
+
+        if(msg==NULL)
+                return NULL;
+
+        if(parse_pai_header(msg)<0)
+        {
+                LM_ERR("cannot parse P-A-I header\n");
+                return NULL;
+        }
+
+        if(msg->pai==NULL || get_pai(msg)==NULL)
+                return NULL;
+
+        tb = get_pai(msg);
+
+        if(tb->parsed_uri.user.s!=NULL || tb->parsed_uri.host.s!=NULL)
+                return &tb->parsed_uri;
+
+        if (parse_uri(tb->uri.s, tb->uri.len , &tb->parsed_uri)<0)
+        {
+                LM_ERR("failed to parse P-A-I URI\n");
+                memset(&tb->parsed_uri, 0, sizeof(struct sip_uri));
+                set_err_info(OSER_EC_PARSER, OSER_EL_MEDIUM, "error parsing P-A-I URI");
+                set_err_reply(400, "bad P-Asserted-Identity uri");
+                return NULL;
+        }
+
+        return &tb->parsed_uri;
+}
+
