throbber
Filed: February 10, 2017
`
`
`Filed on behalf of:
`Patent Owner Voip-Pal.com Inc.
`By: Kerry Taylor
`John M. Carson
`KNOBBE, MARTENS, OLSON & BEAR, LLP
`2040 Main Street, 14th Floor
`Irvine, CA 92614
`Tel.: (858) 707-4000
`Fax: (858) 707-4001
`Email:
`BoxDigifonica@knobbe.com
`
`UNITED STATES PATENT AND TRADEMARK OFFICE
`
`
`BEFORE THE PATENT TRIAL AND APPEAL BOARD
`
`APPLE INC.
`
`Petitioner,
`
`v.
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`VOIP-PAL.COM, INC.,
`
`Patent Owner
`
`
`
`
`Case No. IPR2016-01198
`U.S. Patent 9,179,005
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`
`PATENT OWNER RESPONSE TO PETITION
`
`
`
`Voip-Pal Ex. 2019
`IPR2017-01398
`
`

`

`TABLE OF CONTENTS
`
`Page No.
`
`I.
`
`INTRODUCTION ........................................................................................... 1 
`
`II. ARGUMENT ................................................................................................... 4 
`
`A. 
`
`CHU ‘366 IS NOT PRIOR ART UNDER PRE-AIA 35
`U.S.C. 102(e) ......................................................................................... 4 
`
`B. 
`
`C. 
`
`1. 
`
`2. 
`
`3. 
`
`4. 
`
`Digifonica’s RBR Software ........................................................ 5 
`
`Digifonica Release of RBR Version 361 .................................. 41 
`
`The Smart 421 Engagement ...................................................... 42 
`
`Inventor and Employee Testimony ........................................... 45 
`
`CHEN IS NOT PRIOR ART UNDER PRE-AIA 35
`U.S.C. 102(e) ....................................................................................... 47 
`
`PETITIONER FURTHER FAILS TO ESTABLISH
`THAT THE CHALLENGED CLAIMS ARE OBVIOUS ................. 48 
`
`1. 
`
`2. 
`
`Claimed Subject Matter ............................................................ 49 
`
`Overview Of Cited Art .............................................................. 50 
`
`a. 
`
`b. 
`
`c. 
`
`Overview of Chu ’684 .................................................... 50 
`
`Overview of Chu ’366 .................................................... 52 
`
`Overview of Chen ........................................................... 53 
`
`D. 
`
`PETITIONER’S COMBINATIONS FAIL TO
`PROVIDE “PRODUCING...” WHEN AN
`“ATTRIBUTE” AND A “CALLEE IDENTIFIER”
`MEET “NETWORK CRITERIA” ...................................................... 55 
`
`1. 
`
`The proposed combinations fail to provide at least
`one element in each claim ......................................................... 55 
`
`-i-
`
`

`

`TABLE OF CONTENTS
`(cont’d)
`
`Page No.
`
`2. 
`
`A PHOSITA would not follow the order of steps
`set forth in the Petition to combine the teachings of
`the references. ........................................................................... 59 
`
`E. 
`
`PETITIONER’S PROPOSED COMBINATIONS FAIL
`TO LOCATE ATTRIBUTES ASSOCIATED WITH
`THE CALLER ..................................................................................... 66 
`
`1. 
`
`2. 
`
`The Petition fundamentally misinterpreted the dial
`plans of Chu ‘684 as being user-specific instead of
`enterprise-specific ..................................................................... 66 
`
`Chu ‘684’s “dial plan” is enterprise-specific, not
`user-specific, which undercuts Petitioner’s
`obviousness theories ................................................................. 67 
`
`a. 
`
`b. 
`
`Consulting an enterprise “dial plan” in Chu ‘684 is
`distinct from locating a “caller dialing profile” ............. 67 
`
`Chu ‘684’s enterprise “dial plan” cannot be
`combined with individualized profiles ........................... 68 
`
`F. 
`
`PETITIONER FAILS TO ARTICULATE A PROPER
`REASON TO COMBINE AND OVERLOOKS WHY
`THE COMBINATIONS ARE UNDESIRABLE ............................... 69 
`
`1. 
`
`2. 
`
`No articulated reasoning for reason to combine ....................... 69 
`
`No reason to reformat numbers in Chu ‘684 ............................ 71 
`
`III. CONCLUSION .............................................................................................. 71 
`
`
`
`
`
`
`-ii-
`
`

`

`TABLE OF AUTHORITIES
`
`Page No(s).
`
`Eaton v. Evans,
`204 F.3d 1094 (Fed. Cir. 2000) ...................................................................... 4, 48
`
`In re Gordon,
`733 F.2d 900 (Fed. Cir. 1984) ............................................................................ 59
`
`KSR Int’l. Co. v. Teleflex, Inc.,
`550 U.S. 398 (2007) ............................................................................................ 69
`
`In re NuVasive, Inc.
`842 F.3d 1376 ..................................................................................................... 70
`
`OTHER AUTHORITIES
`
`35 U.S.C. § 102 .......................................................................................... 3, 4, 47, 48
`
`35 U.S.C. § 316 .......................................................................................................... 3
`
`
`
`
`
`-iii-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`Patent Owner Voip-Pal.com, Inc. (“Voip-Pal”) respectfully submits this
`
`Response to the Petition for Inter Partes Review of U.S. 9,179,005 (the ‘005
`
`Patent) (Paper 1) by Apple Inc. (“Apple”).
`
`I. INTRODUCTION
`
`Digifonica, a real party-in-interest to this proceeding and wholly owned
`
`subsidiary of Patent Owner Voip-Pal, starting in 2004 employed top professionals
`
`including three Ph.D.’s with various engineering backgrounds, to develop
`
`innovative software solutions for communications, which, by the mid-2000s it had
`
`implemented in four nodes across three geographic regions. Digifonica’s R&D
`
`efforts led to several patents, including the ‘005 Patent.
`
`Prior to the ‘005 Patent, private branch exchange (PBX) systems typically
`
`enabled users to call destinations internal to the PBX by dialing an extension (i.e.,
`
`“private number”) and destinations external to the PBX on the public switched
`
`telephone network (PSTN) by dialing a “public number.” Such PBX systems
`
`relied on a user-specified classification of the dialed number to interpret the
`
`number and route the call. For example, a user placing a call to the public network
`
`dialed a predefined prefix such as “9” to indicate that subsequent digits were to be
`
`interpreted as a public PSTN number. If no prefix was dialed, the dialed digits
`
`were to be interpreted as a private PBX extension. The number alone, as dialed,
`
`-1-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`dictated how the call was routed. Thus, the user made an affirmative decision
`
`when placing a call as to whether the call would be public or private.
`
`Digifonica’s system employed an approach fundamentally different from
`
`traditional PBX’s: it did not rely on a caller-specified classification (e.g., prefix
`
`digit) to distinguish private calls from PSTN calls. Digifonica’s system provided
`
`flexible, user-specific dialing features and could decouple the type of number
`
`being called from the manner in which the call would be handled. For example,
`
`even if a public PSTN number was dialed, Digifonica’s system could determine
`
`that the call should be routed to a private network, thus allowing the advantages of
`
`private network calling even when callers were unaware that the call recipient
`
`(“callee”) was a Digifonica system subscriber.
`
`Petitioner represents that the claims would have been obvious over a
`
`combination of Chu ‘684 with Chu ‘366 or Chen. The cited references describe
`
`traditional PBX systems and PSTN number reformatting. Petitioner’s proffered
`
`obviousness construction is unsupported by the teachings of the references. A fair
`
`reading of the combination of Chu ‘684 with either Chu ‘366 or Chen would lead
`
`to routing calls to a public or private network based solely on the caller’s dialed
`
`number, which is distinct from classifying calls in the manner recited in the claims.
`
`Petitioner’s attempt to combine Chu ‘684 with Chu ‘366 or Chen distorts the
`
`operation of Chu ‘684’s system. These distortions are evident when one looks at
`
`-2-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`the shifting explanations of Petitioner’s Declarant in describing the proposed
`
`combinations during deposition. These distortions also undermine the ability of
`
`the combined system to accurately function for its intended purpose, i.e., call
`
`routing.
`
`Therefore, Petitioner’s arguments fail to carry its burden of proving that
`
`Claims 1, 24-26, 49-50, 73-79, 83-84, 88-89, 92, 94-96, 98, and 99 of the ‘005
`
`Patent would have been obvious. 35 U.S.C. § 316(e). Petitioner fails to meet its
`
`burden for at least the following reasons:
`
`1.
`
`Patent Owner submits herewith detailed evidence that the
`
`invention claimed in the ‘005 Patent was actually reduced to practice
`
`at least as early as June 6, 2005, prior to the filing dates of both Chu
`
`‘366 and Chen, thus neither reference constitutes prior art under pre-
`
`AIA 35 U.S.C. § 102(e).
`
`2.
`
`The proposed combinations fail to provide all claim
`
`elements, and thus fail to establish a prima facie obviousness case.
`
`3.
`
`The Petition
`
`is
`
`premised
`
`on
`
`a
`
`fundamental
`
`misunderstanding of Chu ‘684, which, once properly understood,
`
`undermines Petitioner’s proposed combinations.
`
`-3-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`For any one of the foregoing deficiencies, the Board should confirm the non-
`
`obviousness of Claims 1, 24-26, 49-50, 73-79, 83-84, 88-89, 92, 94-96, 98, and 99
`
`of the ’005 Patent.
`
`II. ARGUMENT
`
`A. CHU ‘366 IS NOT PRIOR ART UNDER PRE-AIA 35 U.S.C. 102(e)
`In Ground 1, Petitioner asserts that “U.S. Patent No. 8,036,366 to Chu (“Chu
`
`’366”) was filed on Aug. 4, 2006 and therefore qualifies as prior art with regard to
`
`the ’005 Patent under 35 U.S.C. §102(e).” Petition at 10. However, pre-AIA 35
`
`U.S.C. §102(e) establishes that a reference is prior art if it is “filed in the United
`
`States before the invention by the applicant” and Chu ‘366 was not filed before the
`
`invention by the inventors of the ‘005 Patent.
`
`Prior invention can be established by an actual reduction to practice before
`
`the priority date. Eaton v. Evans, 204 F.3d 1094, 1097 (Fed. Cir. 2000). The
`
`inventors of the ‘005 Patent reduced the claimed subject matter to practice well
`
`before Chu ‘366’s filing date of August 4, 2006 and in fact had a system in
`
`operation that practiced the claims of the ‘005 Patent by at least as early as June 6,
`
`2005. Evidence submitted with this response and discussed below includes
`
`computer source code, an outside technical review, reports, design documents and
`
`emails, as well as expert, inventor and employee testimony. This evidence
`
`-4-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`establishes that before the filing date of Chu ‘366 the inventors of the ‘005 had
`
`reduced to practice the inventions of the challenged claims.
`
`Digifonica’s RBR Software
`
`1.
`The ‘005 Patent inventors started the company Digifonica in 2004 and
`
`developed a system that allowed calls to be placed between two IP phones and
`
`between an IP phone and traditional phones on the public switched telephone
`
`network (PSTN). Ex. 2018 at ¶3. Ex. 2012 at ¶3. Ex. 2013 at ¶2. The system
`
`developed by
`
`the
`
`inventors utilized multiple geographically distributed
`
`“supernodes” that would handle routing and billing functions for a set of IP
`
`phones. By June 2005 Digifonica had deployed two supernodes, one in London,
`
`UK and one in Vancouver, Canada. Ex. 2018 at ¶3. Ex. 2012 at ¶3. Ex. 2013 at
`
`¶2.
`
`One of the key components of the Digifonica supernodes was referred to as
`
`“RBR”, which was a software and hardware platform that received information
`
`related to the initiation of a call and responded with call routing messages. Ex.
`
`2012 at ¶4. Ex. 2013 at ¶9. Ex. 2018 at ¶5.
`
`
`
`The Digifonica source code, including the RBR source code, was maintained
`
`in a source code control system known as “Subversion”, which maintains the
`
`complete history of all changes to the RBR source code. Ex. 2012 at ¶4. Ex. 2010
`
`at ¶10. Mr. Pentti Huttunen, a former employee of Digifonica retained a portable
`
`-5-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`hard drive that contained the Digifonica Subversion repository. Ex. 2010 at ¶¶7-
`
`10. The Subversion repository was archived by Mr. Huttunen and it has remained
`
`in his possession unmodified. Id. at ¶11. Mr. Huttunen’s disk drive was delivered
`
`to Mr. Ryan Purita, who analyzed the “svn.tar” file and computed electronic
`
`signatures for that file. Ex. 2011 at ¶4. Dr. Mangione-Smith was provided with
`
`the “svn.tar” file and has verified it conforms to the signatures provided by Mr.
`
`Purita, ensuring that it is identical to the file that was safeguarded by Mr. Huttunen
`
`and analyzed by Mr. Purita. Ex. 2016 at ¶20.
`
`
`
`The Subversion source code repository contains the history of the files that
`
`make up the RBR software development including all versions and the changes
`
`that were made with each version. Id. The Subversion logs identify a version of
`
`the RBR software, Version 361, that was last modified on June 6, 2005 at
`
`09:22:59AM. Ex. 2016 at ¶21. Dr. Mangione-Smith generated a log file for the
`
`RBR software that includes the history of versions for the period up through
`
`November 2006 (Ex. 2015). Ex. 2016 at ¶23. Dr. Mangione-Smith has generated a
`
`printout of Version 361 of the RBR software (Ex. 2014), has analyzed Version 361
`
`of the RBR software, and has compared it to the challenged claims of the ‘005.
`
`Ex. 2016 at pages 12-57.
`
`The RBR software implemented a call routing controller, which corresponds
`
`to the Routing Controller 16 illustrated in Fig. 1 of the ‘005 Patent and recited in
`
`-6-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`the challenged claims. Ex. 2013 at ¶12. Ex. 2012 at ¶16. Ex. 2016 at ¶24. The
`
`RBR software was implemented using a set of scripts in the programming
`
`language PHP, and the functionality that implements the features recited in the
`
`claims of the ‘005 patent can be found in four PHP files that ran on the RBR
`
`server: invite.php, call_routes.class.php, call_ttl.class.php and call_e164.class.php.
`
`Ex. 2016 at ¶22.
`
`The Table below illustrates how the Digifonica system running Version 361
`
`of the RBR source code practices the challenged claims of the ‘005 Patent. Note
`
`the Table below numbers claim elements differently than the Petition in order to
`
`more clearly demonstrate how Version 361 meets all claim elements.
`
`RBR Source Code Version 361
`
`The RBR server implements a call routing controller.
`Callers and callees, which may be internet (IP) phones or
`endpoints on the PSTN, are associated with nodes. Within
`a Digifonica supernode, the RBR server facilitates
`communication by responding to requests from the
`B2BUA server and providing routing messages back to
`the B2BUA server. Ex. 2016 at 12-13.1
`
`
`
`Patent 9,179,005
`
`1. [1p] A process for
`producing a routing
`message for routing
`communications
`between a caller and a
`callee in a
`communication
`system, the process
`comprising:
`
`In response to a SIP INVITE message from an IP phone,
`[1a] using a caller
`
`1 References to Ex. 2016 throughout the claim chart refer to the page number in
`
`Ex. 2016 and not the paragraph number.
`
`-7-
`
`

`

`the B2BUA server sends a USER_INVITE message to the
`RBR server, which then loads a calling profile using the
`“caller” parameter. Ex. 2016 at 13-17.
`
`The inviteClient() function is the entry point for the RBR
`software that receives this message. The inviteClient
`function receives five parameters in an
`XML_RPC_Message (Ex. 2014 at 42, “invite.php” line
`27):
` This function is called by the XML-RPC
`Server expecting type (integer
` * like 4 is THIRD_PARTY_INVITE)
`,username,callee,caller,callid (In that
` * order in the XML_RPC_Message)
`
` *
`
` A
`
` type value of 2 represents a “USER_INVITE” message
`(Ex. 2014 at 42, “invite.php” line 35):
`
`$type_arr[2] = 'USER_INVITE';
`
`Besides the type parameters, the USER_INVITE message
`contains four other parameters identified as “username”,
`“callee”, “caller” and “called” (Ex. 2014 at 42,
`“invite.php” lines 44-47):
`
`$username = $params->getParam(1)-
`>scalarval();
`$callee = $params->getParam(2)-
`>scalarval();
`$caller = $params->getParam(3)-
`>scalarval();
`$callid = $params->getParam(4)-
`>scalarval();
`
`The “caller” variable corresponds to the caller identifier
`and the “callee” parameter corresponds to the callee
`identifier.
`
`The inviteClient() function first constructs a new
`call_routes() object (Ex. 2014 at 43, “invite.php” line 60):
`
`-8-
`
`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`identifier associated
`with the caller to
`locate a caller dialing
`profile comprising a
`plurality of calling
`attributes associated
`with the caller;
`
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`
`$call = new
`call_routes($caller,$caller_domain,$callee,$c
`allee_domain,$type,$forced_cid);
`
`The constructor for call_routes() is defined at lines 59-74
`of call_routes.class.php (Ex. 2014 at 19):
`
`/**
` * Constructor... the class must be called
`with the defined parameters. Callee domain is
`optional and the class will try to guess it.
` * Special is a flag (THIRD_PARTY_INVITE)
`when set, the caller is not set and
`concidered a incoming PSTN call.
` *
` * @param String $caller
` * @param String $domain
` * @param String $callee
` * @param String $callee_domain
` * @param String $special
` * @return call_routes
` */
`function
`call_routes($caller,$domain,$callee,$callee_d
`omain='',$special='') {
` $this->special_request = $special;
` $this-
`>call_ttl($caller,$domain,$callee,$callee_dom
`ain);
` $this->genereate_routes();
`}
`
`The call_routes() constructor calls the call_ttl() function
`(Ex. 2014 at 19, “call_routes.class.php” line 72):
`
`$this-
`>call_ttl($caller,$domain,$callee,$callee_dom
`ain);
`
`The call_ttl() constructor is defined at lines 131-153 of
`call_ttl.class.php (Ex. 2014 at 27):
`
`/**
`
`-9-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
` * Class constructor must be initiated with
`at least caller, domain (callee_domain and
`special flag are optional.)<br>
` * Once it is initiated, it will
`automatically execute proper functions and do
`its due diligence, to create TTL.
` * $this->ttl is where you can get the Total
`time to live for this call. can be accessed
`byt extending classes and <br>
` * through the function get_ttl().
` *
` * @param string $caller
` * @param string $domain
` * @param string $callee
` * @param string $callee_domain
` * @param string $special
` * @return call_ttl
` */
`function
`call_ttl($caller,$domain,$callee,$callee_doma
`in='',$special='') {
` if(!$callee_domain){
` //try to guess
` if($temp_domain = $this-
`>guess_user_domain($callee)) $this-
`>callee_domain=$temp_domain;
` }
` $this-
`>set_caller_data($caller,$domain,$special);
`
` $this->set_callee($callee,$this-
`>callee_domain);
` $this->generate_ttl();
`}
`
`The call_ttl() function calls the set_caller_data() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 149):
`
`$this-
`>set_caller_data($caller,$domain,$special);
`
`The set_caller_data() function is defined at lines 187-189
`of call_ttl.class.php and calls the set_caller() function (Ex.
`2014 at 28, “call_ttl.class.php” line 188):
`
`
`-10-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`$this->set_caller($caller,$domain);
`
`The set_caller() function is defined at lines 325-340 of
`call_e164.class.php (Ex. 2014 at 7):
`
`/**
` * Takes care of sequence of execution to
`create a caller profile
` *
` * @param String $caller
` * @param String $domain
` */
`public function set_caller($caller,$domain){
`
` $this->caller = $caller;
`
` if(! ($this->special_request ==
`'THIRD_PARTY_INVITE')){
` $this->caller_domain = $domain;
` $this->create_caller_profile();
` }
` $this->caller_is_set = true;
`}
`
`The set_caller() function calls the create_caller_profile()
`function (Ex. 2014 at 7, “call_e164.class.php” line 337):
`
`$this->create_caller_profile();
`
`The create_caller_profile() function is defined at lines
`342-391 of call_e164.class.php (Ex. 2014 at 7-8) (lines
`342-346 shown):
`
`/**
` * All aspects of the caller Flags and data
`needed to identify a caller is set here.
`including overlapping numbers.
` *
` */
`private function create_caller_profile(){
`
`The create_caller_profile() function queries an SQL
`database to load a caller profile (Ex. 2014 at 7,
`
`-11-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1b] when at least one
`of said calling
`attributes and at least
`a portion of a callee
`identifier associated
`with the callee meet
`private network
`classification criteria,
`
`
`
`“call_e164.class.php” line 348):
`
`$user_data = mysql_fetch_array($this-
`>sql_query("SELECT * FROM
`subscriber_dialing_profile WHERE
`username='$this->caller' and domain= '$this-
`>caller_domain'"));
`
`The data returned from the SQL query include the caller’s
`idd (international direct dial digits), ndd (national direct
`dial digits) and area code (Ex. 2014 at 7,
`“call_e164.class.php” lines 350-356):
`
`$this->caller_idd = $user_data['idd'];
`$this->caller_ndd = $user_data['ndd'];
`$this->caller_areacode =
`$user_data['area_code'];
`$this->caller_countrycode =
`$user_data['country_code'];
`$temp =
`explode(",",$user_data['local_length']);
`$this->caller_min_local_length = $temp[0];
`$this->caller_max_local_length = $temp[1];
`
`The RBR server matches attributes in the caller profile
`values against the callee identifier. The RBR server
`classifies the call as a public network call or a private
`network call. Ex. 2016 at 17-20.
`
`The call_ttl() constructor, after calling the
`set_caller_data() function calls the set_callee() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 151):
`
`
`$this->set_callee($callee,$this-
`>callee_domain);
`
`The set_callee() function is defined at lines 393-418 of
`call_e164.class.php (Ex. 2014 at 8-9) (lines 393-399
`shown):
`
`/**
` * Takes care of the sequence and logic
`
`-12-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`needed to create a callee
` *
` * @param String $callee
` * @param String $callee_domain
` */
`public function
`set_callee($callee,$callee_domain=''){
`
`The set_callee() function calls the create_callee_profile()
`function (Ex. 2014 at 8, “call_e164.class.php” line 407):
`
`$this->create_callee_profile();
`
`The create_callee_profile() function is defined at lines
`450-539 of call_e164.class.php (Ex. 2014 at 9-11) (lines
`450-454 shown):
`
`/**
` * Creates a callee profile, all aspects of
`the callee is set here including the e164
`number is also set here. NOTE: the e164
`number can change when call forwarding
`occures.
` *
` */
`private function create_callee_profile(){
`
`The create_callee_profile() function matches values that
`were previously retrieved as part of the caller profile with
`the callee identifier. For example, a check is made to see
`if the callee identifier begins with the international dialing
`digits (idd) (Ex. 2014 at 9-10, “call_e164.class.php” lines
`467-476):
`
`case (isset($this->caller_idd) &&
`preg_match("/^".$this->caller_idd."/",$this-
`>callee)):
`$idd_length = strlen($this->caller_idd);
`$this->set_ml_id($idd_length);
`if($this->callee_data['ml_id']){ //callee was
`found and set
`$this->callee_type = 1;
`$this->check_callee_length($idd_length);
`
`-13-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`$this->set_e164_formed_number(substr($this-
`>callee,$idd_length));
`}else{
` throw new Exception(4);
`}
`
`Further, create_callee_profile() checks for matching
`national dialing digits (Ex. 2014 at 10,
`“call_e164.class.php” lines 479-494), checks for matching
`area codes (Ex. 2014 at 10, “call_e164.class.php” lines
`495-501), checks for a matching local number (Ex. 2014
`at 10-11, “call_e164.class.php” lines 506-513), and
`checks for a network number (Ex. 2014 at 11,
`“call_e164.class.php” lines 520-527).
`
`The create_callee_profile() function classifies the call by
`setting the callee_type variable to a value from 1 to 7. In
`the case of a private classification, the callee_type variable
`is set to one of the values 4 or 7 (Ex. 2014 at 11,
`“call_e164.class.php” lines 523 and 525 respectively):
`
`$this->callee_type = 4;
`$this->callee_type = 7;
`
`The set_callee() function calls the check_for_did()
`function. The check_for_did() function is defined at lines
`420-441 of call_e164.class.php (Ex. 2014 at 9):
`
`/**
` * Checks if the number being called is a
`mapped DID in our system, if it is we rout it
`internally
` *
` * @param String $user
` * @return Boolean or
`DidMap(DigifonicaNumber#Domain)
` */
`protected function check_for_did($user=''){
`
`$num = $user?$user:$this->callee;
`
`$did_check = @mysql_fetch_array($this-
`>sql_query("SELECT * FROM did_bank WHERE
`did='$num'"));
`
`-14-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1c] producing a
`private network
`routing message for
`receipt by a call
`controller, said private
`network routing
`message identifying
`an address, on the
`private network,
`associated with the
`callee; and
`
`
`if($did_check[0]){
`
`
`try{
`
`
`
`if($did_check['mapped_to'] and
`
`$did_check['domain']){
`
`
`
`
`return
`$did_check['mapped_to']."#".$did_check['domai
`n'];
`
`
`
`}else{
`
`
`
`
`throw new Exception(8);
`
`
`
`}
`
`
`}catch (Exception $e){
`
`
`
`$this-
`>e164_exception_handler($e->getMessage());
`
`
`}
`
`}
`
`return false;
`}
`
`The check_for_did() function queries an SQL database to
`determine if the reformatted callee number is contained in
`the “did_bank” table. This check determines if the callee
`is mapped to a Digifonica subscriber account. In the case
`that the check_for_did() function returns a value, the
`set_callee() function will make a call to itself at line 415
`of call_e164.class.php (Ex. 2014 at 8). This will cause a
`second call to the create_callee_profile() function, which
`will cause the callee_type to be changed to 4 or 7
`depending on whether the destination is associated with
`the same supernode or a different supernode as the caller.
`
`The RBR server produces a private network routing
`message in the case of a private network call
`classification. The routing message identifies an address
`associated with the destination Digifonica IP phone. Ex.
`2016 at 20-21.
`
`The call_routes() constructor, after calling the call_ttl()
`function calls the genereate_routes() function (Ex. 2014 at
`19, “call_routes.class.php” line 73):
`
`$this->genereate_routes();
`
`
`-15-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1d] when at least one
`of said calling
`attributes and at least
`a portion of said
`callee identifier meet
`a public network
`
`The genereate_routes() function is defined at lines 91-148
`of call_routes.class.php (Ex. 2014 at 19-21) (lines 91-95
`shown):
`
`/**
` * Generates the routes and the SIP messages
`including VM data.
` *
` */
`protected function genereate_routes(){
`
`The genereate_routes() function tests the value of
`callee_type and in the case of 4 and 7 sets the routes[]
`array (Ex. 2014 at 20, “call_routes.class.php” line 146):
`
`/**
` * Generates the routes and the SIP messages
`including VM data.
` *
` */
`protected function genereate_routes(){
`
`The routes[] array is returned to the inviteClient() function
`and stored into a “$response” variable (Ex. 2014 at 43,
`“invite.php” line 62):
`
`$response = $call->get_routes();
`
`The inviteClient() function returns the $response variable
`to the B2BUA server over the XML_RPC connection (Ex.
`2014 at 43, “invite.php, line 70):
`
`return new XML_RPC_Response(new
`XML_RPC_Value($response, "string"));
`
`
`The RBR server matches attributes in the caller profile
`values against the callee identifier. The RBR server
`classifies the call as a public network call or a private
`network call. Ex. 2016 at 21-24.
`
`The call_ttl() constructor, after calling the
`
`-16-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`classification
`criterion,
`
`
`set_caller_data() function calls the set_callee() function
`(Ex. 2014 at 27, “call_ttl.class.php” line 151):
`
`$this->set_callee($callee,$this-
`>callee_domain);
`
`The set_callee() function is defined at lines 393-418 of
`call_e164.class.php (Ex. 2014 at 8-9) (lines 393-399
`shown):
`
`/**
` * Takes care of the sequence and logic
`needed to create a callee
` *
` * @param String $callee
` * @param String $callee_domain
` */
`public function
`set_callee($callee,$callee_domain=''){
`
`The set_callee() function calls the create_callee_profile()
`function (Ex. 2014 at 8, “call_e164.class.php” line 407):
`
`$this->create_callee_profile();
`
`The create_callee_profile() function is defined at lines
`450-539 of call_e164.class.php (Ex. 2014 at 9-11) (lines
`450-454 shown):
`
`/**
` * Creates a callee profile, all aspects of
`the callee is set here including the e164
`number is also set here. NOTE: the e164
`number can change when call forwarding
`occures.
` *
` */
`private function create_callee_profile(){
`
`The create_callee_profile() function matches values that
`were previously retrieved as part of the caller profile with
`the callee identifier. For example, a check is made to see
`
`-17-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`if the callee identifier begins with the international dialing
`digits (idd) (Ex. 2014 at 9-10, “call_e164.class.php” lines
`467-476):
`
`case (isset($this->caller_idd) &&
`preg_match("/^".$this->caller_idd."/",$this-
`>callee)):
`$idd_length = strlen($this->caller_idd);
`$this->set_ml_id($idd_length);
`if($this->callee_data['ml_id']){ //callee was
`found and set
`$this->callee_type = 1;
`$this->check_callee_length($idd_length);
`$this->set_e164_formed_number(substr($this-
`>callee,$idd_length));
`}else{
` throw new Exception(4);
`}
`
`Further, create_callee_profile() checks for matching
`national dialing digits (Ex. 2014 at 10,
`“call_e164.class.php” lines 479-494), checks for matching
`area codes (Ex. 2014 at 10, “call_e164.class.php” lines
`495-501), checks for a matching local number (Ex. 2014
`at 10-11, “call_e164.class.php” lines 506-513), and
`checks for a network number (Ex. 2014 at 11,
`“call_e164.class.php” lines 520-527).
`
`The create_callee_profile() function classifies the call by
`setting the callee_type variable to a value from 1 to 7. In
`the case of a public classification, the callee_type variable
`is set to one of the values 1, 2, 3 or 6 (Ex. 2014 at 10,
`“call_e164.class.php” lines 471, 483, 485, 497 and 510):
`
`$this->callee_type = 1;
`$this->callee_type = 6;
`$this->callee_type = 2;
`$this->callee_type = 3;
`$this->callee_type = 3;
`
`The set_callee() function calls the check_for_did()
`function. The check_for_did() function is defined at lines
`
`-18-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`[1e] producing a
`public network
`routing message for
`receipt by the call
`
`420-441 of call_e164.class.php (Ex. 2014 at 9):
`
`/**
` * Checks if the number being called is a
`mapped DID in our system, if it is we rout it
`internally
` *
` * @param String $user
` * @return Boolean or
`DidMap(DigifonicaNumber#Domain)
` */
`protected function check_for_did($user=''){
`
`$num = $user?$user:$this->callee;
`
`$did_check = @mysql_fetch_array($this-
`>sql_query("SELECT * FROM did_bank WHERE
`did='$num'"));
`
`if($did_check[0]){
`
`
`try{
`
`
`
`if($did_check['mapped_to'] and
`$did_check['domain']){
`
`
`
`
`return
`$did_check['mapped_to']."#".$did_check['domai
`n'];
`
`
`
`}else{
`
`
`
`
`throw new Exception(8);
`
`
`
`}
`
`
`}catch (Exception $e){
`
`
`
`$this-
`>e164_exception_handler($e->getMessage());
`
`
`}
`
`}
`
`return false;
`}
`
`The check_for_did() function queries an SQL database to
`determine if the reformatted callee number is contained in
`the “did_bank” table. This check determines if the callee
`is mapped to a Digifonica subscriber account and will
`return false in the case that there is no value.
`
`The RBR server produces a public network routing
`message in the case of a public network call classification.
`The routing message identifies one or more addresses for
`PSTN gateways. Ex. 2016 at 24-25.
`
`-19-
`
`

`

`IPR2016-01198
`Apple Inc. v. Voip-Pal
`
`controller, said public
`network routing
`message identifying a
`gateway to the public
`network.
`
`
`
`The genereate_routes() function tests the value of
`callee_type and in the case of 1, 2, 3 or 6 queries an SQL
`database to get ‘supplier’ addresses (Ex. 2014 at 19,
`“call_routes.class.php” line 99):
`
`$routes_q = $this->sql_query("SELECT * FROM
`suppliers WHERE ml_id=".$this-
`>callee_data['ml_id']." ORDER BY sup_price
`ASC");
`
`The genereate_routes() function then processes the results
`from the SQL query and builds a routes[] array (Ex. 20

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket