IP Library › Granted Patent US 8,838,630
Granted Patent B2
US 8,838,630 · App. 12/790,400 · Granted Sep 16, 2014

Method and systems for efficient delivery of previously stored content

Inventors: Henk Bots (Santa Clara, CA); Srikanth Devarajan (Santa Clara, CA); Saravana Annamalaisami (Santa Clara, CA)
Assignee: Citrix Systems, Inc.
H04L67/06Y10S707/99956Y10S707/99955Y10S707/99948G06F17/2211H04L67/1097
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,838,630
App. No.
12/790,400
Filed
May 28, 2010
Granted
Sep 16, 2014
Kind
B2
Art Unit
2168
USPC
707/205
Abstract

Systems and methods for reducing file sizes for files delivered over a network are disclosed. A method comprises receiving a first file comprising sequences of data; creating a hash table having entries corresponding to overlapping sequences of data; receiving a second file comprising sequences of data; comparing each of the sequences of data in the second file to the sequences of data in the hash table to determine sequences of data present in both the first and second files; and creating a third file comprising sequences of data from the second file and representations of locations and lengths of said sequences of data present in both the first and second files.

Claims (35)

1. A method comprising:

(a) receiving, by a device having a first file comprising a first plurality of sequences of data, a second file comprising a second plurality of sequences of data, the device creating a hash table comprising entries corresponding to successive, overlapping byte sequences within the first file;

(b) comparing, by the device, hashes for each of the first plurality of sequences of data with hashes for each of the second plurality of sequences of data to identify a first sequence of data and a second sequence of data present in both the first plurality of sequences of data of the first file and the second plurality of sequences of data of the second file; and

(c) establishing, by the device, a third file comprising one or more sequences of data from the second file, a representation of a location identifying a number of bytes in the third file between a predetermined byte of representation of the first sequence of data represented in the third file and a predetermined byte of representation of a second sequence of data represented in the third file, and a representation of a length identifying a number of bytes of the first sequence of data bytes matching the second sequence of data bytes.

2. The method of claim 1 , wherein step (b) further comprises:

(i) computing a hash value for a given sequence of data in the second file;

(ii) checking a hash table of the first file for an entry corresponding to the hash value;

(iii) comparing the sequence of data from the second file with a sequence of data in the first file corresponding to said hash table entry; and

(iv) comparing the bytes following the sequence of data from the second file with the bytes following the sequence of data in the first file to determine a length of the first sequence of data present in both the first file and the second file.

3. The method of claim 1 , wherein step (c) further comprising representing, by the device, the location as a relative distance from a location in the first file.

4. The method of claim 1 , wherein step (c) further comprises translating, by the device, the third file into a byte sequence using a byte encoding protocol.

5. The method of claim 1 , wherein step (c) further comprises executing, by the device, a script to create the third file.

6. The method of claim 1 , wherein step (c) further comprises establishing, by the device, the representation of the location identifying the number of bytes between a last byte of the first sequence of data and the predetermined byte of the second sequence of data.

7. The method of claim 1 , wherein step (c) further comprises establishing, by the device, the representation of the location identifying the number of bytes between the predetermined byte of the first sequence of data and a byte preceding the first byte of the second sequence of data.

8. The method of claim 1 , wherein step (c) further comprises establishing, by the device, the representation of the location identifying a number of bytes between the last byte of the first sequence of data and a byte preceding the first byte of the second sequence of data.

9. A system comprising:

a device storing a first file comprising a first plurality of sequences of data, the device creating a hash table comprising entries corresponding to successive, overlapping byte sequences within the first file;

a transceiver of the device receiving a second file comprising a second plurality of sequences of data;

an engine of the device comparing hashes for each of the first plurality of sequences of data with hashes for each of the second plurality of sequences of data to identify a first sequence of data and a second sequence of data present in both the first plurality of sequences of data of the first file and the second plurality of sequences of data of the second file; and

wherein the device establishes a third file comprising one or more sequences of data from the second file, a representation of a location identifying a number of bytes in the third file between a predetermined byte of representation of the first sequence of data represented in the third file and a predetermined byte of representation of a second sequence of data represented in the third file, and a representation of a length identifying a number of bytes of the first sequence of data bytes matching the second sequence of data bytes.

10. The system of claim 9 , wherein the engine of the device performs the following:

(i) computing a hash value for a given sequence of data in the second file;

(ii) checking a hash table of the first file for an entry corresponding to the hash value;

(iii) comparing the sequence of data from the second file with a sequence of data in the first file corresponding to said hash table entry; and

(iv) comparing the bytes following the sequence of data from the second file with the bytes following the sequence of data in the first file to determine a length of the first sequence of data present in both the first file and the second file.

11. The system of claim 9 , wherein the engine creates the representation of the location as a relative distance from a location in the first file.

12. The system of claim 9 , wherein the engine establishes the representation of the location identifying the number of bytes between the last byte of the first sequence of data and the predetermined byte of the second sequence of data.

13. The system of claim 9 , wherein the engine establishes the representation of the location identifying the number of bytes between the predetermined byte of the first sequence of data and a byte preceding the first byte of the second sequence of data.

14. The system of claim 9 , wherein the engine establishes the representation of the location identifying the number of bytes between the last byte of the first sequence of data and a byte preceding the first byte of the second sequence of data.

15. A system comprising:

a device intermediary to a client and a server, the device storing a first file communicated between the server and the client, the first file comprising a first plurality of sequences of data, the device creating a hash table comprising entries corresponding to successive, overlapping byte sequences within the first file;

a transceiver of the device receiving a second file communicated between the server and the client, the second file comprising a second plurality of sequences of data;

an engine of the device comparing hashes for each of the first plurality of sequences of data with hashes for each of the second plurality of sequences of data to identify a first sequence of data and a second sequence of data present in both the first plurality of sequences of data of the first file and the second plurality of sequences of data of the second file; and

wherein the device establishes a third file comprising one or more sequences of data from the second file, a representation of a location identifying a number of bytes in the third file between a predetermined byte of representation of the first sequence of data represented in the third file and a predetermined byte of representation of a second sequence of data represented in the third file, and a representation of a length identifying a number of bytes of the first sequence of data bytes matching the second sequence of data bytes.

16. The system of claim 15 , wherein the device transmits the third file to the client.

Assignments (9)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 22, 2013
From: BOTS, HENK; ANNAMALAISAMI, SARAVANA; DEVARAJAN, SRIKANTH
To: CITRIX SYSTEMS, INC.
Reel/Frame 031468/0991 →
Continuity (2)
Continuation 11428058 · Jun 30, 2006
Related Publication 20100235374A1 · Sep 16, 2010